Mehrere TextBoxen mit einem KeyPressEvent

  • WPF

Es gibt 34 Antworten in diesem Thema. Der letzte Beitrag () ist von EaranMaleasi.

    Mehrere TextBoxen mit einem KeyPressEvent

    Hallo zusammen,

    nach ausgiebiger, verzweifelter Suche, habe ich mich nun doch entschlossen mich in einem Forum anzumelden! :)

    Hintergrund:
    Ich habe bislang in Excel VBA-Makros geschrieben, bin aber inzwischen u.a. nicht mehr wirklich zufrieden mit den begrenzten Möglichkeiten der designtechnischen Visualisierung meiner Projekte! ;)
    Vor einigen Jahren habe ich dann Visual Studio 2010 Professional geschenkt bekommen und darin ein paar Gehversuche unternommen - d.h. im Klartext, dass ich ein paar grafisch sehr nette Oberflächen mithilfe von XAML erstellt habe.
    Vieles am Code erschließt sich mir jedoch leider bislang nicht, obwohl ich mir seinerzeit ein Entwicklerbuch dazu gegönnt hatte...

    Ich hoffe, dass ich nun nicht gleich ausgelacht werde - mir ist schon klar, dass ich mit einem veralteten Tool arbeite! :(

    Zum eigentlichen Thema:
    Aktuell versuche ich mehrere Textboxen mit einem Code anzusprechen, was in Excel sehr einfach ist, hier aber nicht zu funktionieren scheint

    Konkret versuche ich, dass KeyPress-Event zu nutzen. Der Compiler meckert aber bereits bei der Sub-Definition (Sry, dass ich mich nicht so fachmännisch ausdrücke...):

    VB.NET-Quellcode

    1. Private Sub mytxt_KeyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs) Handles txtMaß1.KeyPress, txtMaß2.KeyPress


    Das KeyPress wird mit dem Fehler "Event 'KeyPress' cannot be found." quittiert.
    Ich hatte bereits versucht eine separate Klasse für das Event anzulegen, bin aber daran gescheitert... (Mit VBA war das, meinem Empfinden nach, wesentlich unkomplizierter ^^ !)
    Dort habe ich dieselbe Sub-Definition benutzt und der Compiler meckerte nicht. Allerdings konnte ich dort auch "Inherits System.Windows.Forms.KeyEventArgs" nutzen, was ich in meiner Standard-Klasse, die die Userform steuert offenbar nicht kann!
    (Ich verwende im übrigen WPF... Die angesprochenen TextBoxen liegen auf einem UserControl und dort in einem Grid, welches wiederum ein TabControl enthält... Dort verwende ich dann StackPanel, worin die besagten TextBoxen liegen...)

    Für Erklärungen bzw. Unterstützung wäre ich sehr dankbar!

    Falls es gleich besser wäre (weil vielleicht einfacher) auf eine neuere Version der Visual Studios umzusteigen, wäre dieser Hinweis ebenfalls hilfreich!
    Und falls es gute Lernhilfen gibt, würde mich das auch sehr interessieren!

    Vielen Dank!
    Beany

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Beany“ ()

    @Beany Bist Du sicher, dass Du mit WPF, nicht aber WinForms arbeitest?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo a.b_om,

    ja, sind sie...
    Meinst du mit Doppel-s, die beiden in KeyPress?

    Im Code passiert nicht sonderlich viel bislang... Da habe ich lediglich angegeben, dass nur Zahlen verwendet werden dürfen und der Compiler meckert auch nicht...

    VB.NET-Quellcode

    1. Private Sub mytxt_KeyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs) Handles txtMaß1.KeyPress, txtMaß2.KeyPress
    2. Select Case Asc(e.KeyChar)
    3. Case 13, 9 : MsgBox("Enter oder TAB gedrückt!")
    4. Case 48 To 57
    5. Case Else : e.Handled = True
    6. End Select
    7. End Sub


    Was würdest du denn statt KeyPress verwenden?

    Gruß,
    Beany
    @Beany
    Das von 2010, bin ich mir nicht sicher, aber von 2017/19 ist das möglich.

    Die Community-Version ist gratis. Musst es nur runterladen.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „a.b_om“ ()

    Hallo a.b_om,

    beim Umstellen auf KeyDown will er dann "UpDownEventArgs", "KeyboardEventArgs" oder "PreviewKeyDownEventArgs" haben.
    "UpDownEventArgs" und "PreviewKeyDownEventArgs" ergeben ebenfalls einen Fehler bei txtMaß1.KeyDown und zzgl. bei e.KeyChar bzw. e.KeyHandled
    "KeyBoardEventArgs" ergibt einen Fehler bei e.KeyChar (""'KeyChar' is not a member of System.Windows.Input.Keyboard.EventArgs'.")

    Die Community-Version ist gratis. Musst es nur runterladen.

    Oh, cool... sowas gibt's hier? 8o

    Nein, ich meine das doppel s bei txtMaß1. Das könnte der Fehler sein, muss aber nicht.

    Hab ich gerade auch probiert... Daran liegt's leider auch nicht! ;(

    Gruß,
    Beany

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Beany“ ()

    nimm mal das deutsches doppel s weg.

    Solche Events habe ich bisher nicht gesehen. Bis jetzt kenne ich nur KeyUp, KeyDown und KeyPress für die Tasteneingabe.

    Edit:

    deutsches doppel s = ẞ

    Edit 2:

    @Beany
    Nein hier nicht, aber bei Microsoft

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „a.b_om“ ()

    KeyPress gibt's in der WPF nicht als TextBox-Event. Das gibt's nur in WinForms.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    Hallo zusammen,

    dann ist das wohl die Erklärung - vielen Dank!
    In diesem Fall ist es dann wohl auch nicht möglich, das über eine andere Klasse zu instanziieren, oder?

    Gruß,
    Beany

    P.S.: Wie kann ich diesen Thread als erledigt markieren, wenn diese letzte Frage beantwortet wurde?

    Beany schrieb:

    In diesem Fall ist es dann wohl auch nicht möglich, das über eine andere Klasse zu instanziieren, oder?


    Wie meinst du das?

    Beany schrieb:

    P.S.: Wie kann ich diesen Thread als erledigt markieren, wenn diese letzte Frage beantwortet wurde?



    Ganz oben rechts über dem ersten Post auf Thema bearbeiten und dann als erledigt markieren.
    Hallo a.b_om,

    ich meine in einer anderen Klasse...
    Dort hatte ich das gleiche probiert und der Compiler meckerte nicht bei KeyPress - ich habe das aber leider nich an die Klasse der UserForm übergeben können, (sicherlich liegt das auch daran, dass ich mit der OOP in Visual Studio [noch] nicht so vertraut bin - aus diesem Grund bat ich zu Beginn auch um mögliche Lernhilfen dazu... Was sehr gut funktioniert hat, war das Einlesen von Daten aus einer lokalen Datenbank in ComboBoxen, die ich in derselben Form verwende... Auch das habe ich über eine andere Klasse geregelt... Ich frage mich nun, wie das mit TextBoxen funktioniert, in die ich etwas eingeben möchte).

    @ErfinderDesRades
    evtl. die entscheidende Frage: Welchen Datentyp hat txtMaß1?


    Der Datentyp ist Double...
    Aber ist das denn entscheidend für die Behandlung der TextBox im Sinne der Tastaturbefehle, sprich wie ich das Control zu verlassen gedenke [KeyPress, KeyDown, TextChanged]?

    TextChanged hat m.E. den Nachteil, dass nach jeder Eingabe eines neuen Zeichens etwas passiert, oder irre ich da?
    Ich möchte das Ereignis lieber nach Abschluss der gesamten Eingabe auslösen!

    Gruß,
    Beany

    Beany schrieb:

    Der Datentyp ist Double...

    1. Ein Double hat keine Events.
    2. Events kann man nur in dem "Code behind" einen Event aufrufen.
    Code Behind = Klasse hinter der Form

    Ich habe ein Bild angehängt wo das Code Behind ist. Ist aber mit WinForms.

    Beany schrieb:

    extChanged hat m.E. den Nachteil, dass nach jeder Eingabe eines neuen Zeichens etwas passiert, oder irre ich da?


    Gibt es bei KeyPress/KeyUp/KeyDown auch
    Bilder
    • Unbenannt.PNG

      1,99 kB, 216×60, 151 mal angesehen

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „a.b_om“ ()

    Hallo a.b._om,

    Ein Double hat keine Events.

    Aber die TextBox selbst ist doch ein Objekt, nicht?
    Und somit kann ich Events auslösen oder bin ich da völlig auf dem Holzweg?
    Gibt es bei KeyPress/KeyUp/KeyDown auch

    Ja, aber nicht nach Eingabe jedes einzelnen Zeichens, oder?
    (Also im Sinne von den Zeichen, die ich ja mit KeyPress vorgeben kann, sprich: Zahlen eingeben okay, Verlassen der TextBox mit Enter, TAB oder einfach indem ich den Fokus auf ein anderes Control setze... Ich hoffe, dass ich mich damit nicht zu kryptisch ausdrücke :D !)

    Gruß,
    Beany

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Beany“ ()