none
Ereignisbehandlung zuweisen RRS feed

  • Frage

  • Hallo,

    in einem Formular lege ich mehrere Textboxen an (siehe Code).
    Wie kann ich jetzt bei den Textboxen auf das OnKeyDown-Ereignis reagieren ?

    for count = 1 to ParameterFeldAnzahl
    Parameter(count) = New TextBox
    Parameter(count).Left = ParameterFeldLinks
    Parameter(count).Top = ParameterFeldOben + ParameterFeldVertVersatz* (count - 1)
    Parameter(count).Width = ParameterFeldBreit
    Parameter(count).Height = ParameterFeldHoch
    Me.Controls.Add(Parameter(count))
    Parameter(count).Show()
    Next

    Wenn in den Textboxen Text eingegeben und anschlissend die Entertatse gedrückt wird soll der Text verarbeitet werden.
    Die Anzahl der Textboxen ist dynamisch

    Danke im Voraus,
    Diburg
    Montag, 16. August 2010 10:53

Antworten

  • Hallo,


    in einem Formular lege ich mehrere Textboxen an (siehe Code).
    Wie kann ich jetzt bei den Textboxen auf das OnKeyDown-Ereignis reagieren ?

    for count = 1 to ParameterFeldAnzahl
    Parameter(count) = New TextBox
    Parameter(count).Left = ParameterFeldLinks
    Parameter(count).Top = ParameterFeldOben +  ParameterFeldVertVersatz* (count - 1)
    Parameter(count).Width = ParameterFeldBreit
    Parameter(count).Height = ParameterFeldHoch
    Me.Controls.Add(Parameter(count))
    Parameter(count).Show()
    Next

    Wenn in den Textboxen Text eingegeben und anschlissend die Entertatse gedrückt wird soll der Text verarbeitet werden.

    Über die AddHandler Anweisung kannst Du Ereignismethoden zuweisen. Die Signatur dieser Methode muss dabei dem Ereignishandler entsprechen. Für das KeyDown Ereignis wäre dies wie folgt:

     Private Sub TextBoxKeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs)
    
     End Sub

    Der Parameter 'sender' liefert Dir immer die TextBox, die das Ereignis ausgelöst hat. Jetzt kannst Du in Deiner Schleife diese Methode dem KeyDown Ereignis zuweisen:

    AddHandler Parameter(count).KeyDown, AddressOf TextBoxKeyDown
    

    Mit der RemoveHandler Anweisung kannst Du die Zuweisung wieder auflösen.

    AddHandler und RemoveHandler
    http://msdn.microsoft.com/de-de/library/6yyk8z93(VS.90).aspx


    Thorsten Dörfler
    Microsoft MVP Visual Basic
    vb-faq.de
    Montag, 16. August 2010 11:05
  • Hallo,

    in einem Formular lege ich mehrere Textboxen an (siehe Code).
    Wie kann ich jetzt bei den Textboxen auf das OnKeyDown-Ereignis
    reagieren ?

    Das nachfolgende Beispiel zeigt Dir, wie Du mehrere Textboxen
    erstellen kannst und diesen die Ereignisprozeduren (Eventhandler)
    KeyDown, KeyPress, KeyUp u. TextChanged zuweisen und später
    auch wieder entfernen kannst.

    Kopiere nachfolgenden Code in ein leeres Formmodul (Form1.vb)

    ' / Beginn Code Form1.vb
    Public Class Form1
        Private Sub Form1_FormClosing _
                (ByVal sender As Object, _
                 ByVal e As System.Windows.Forms.FormClosingEventArgs _
                ) Handles Me.FormClosing

            Dim i As Integer

            ' Eventhandler entfernen
            For i = 1 To 5
                Dim TB As TextBox = _
                    DirectCast(Me.Controls("Textbox" & i.ToString), TextBox)

                RemoveHandler _
                        TB.TextChanged, _
                        AddressOf TextBox_TextChanged

                RemoveHandler _
                        TB.KeyDown, _
                        AddressOf TextBox_KeyDown

                RemoveHandler _
                        TB.KeyPress, _
                        AddressOf TextBox_KeyPress

                RemoveHandler _
                        TB.KeyUp, _
                        AddressOf TextBox_KeyUp
            Next

        End Sub

        Private Sub Form1_Load _
                (ByVal sender As System.Object, _
                 ByVal e As System.EventArgs _
                 ) Handles MyBase.Load

            CreateControls()
        End Sub

        Private Sub CreateControls()
            Dim i As Integer
            Dim TB As TextBox
            Dim Top As Integer = 15
            Dim Fnt As New Font("Arial", 12)

            For i = 1 To 5
                TB = New TextBox
                With TB
                    .Name = "Textbox" & i.ToString
                    .Font = Fnt
                    .SetBounds _
                            (10, Top, _
                             Me.ClientSize.Width - 20, _
                             .Height)

                    .Anchor = _
                            AnchorStyles.Left Or _
                            AnchorStyles.Top Or _
                            AnchorStyles.Right

                    .Text = .Name
                    Top = TB.Bottom + 10
                End With
                Me.Controls.Add(TB)

                ' Eventhandler hinzufügen
                AddHandler _
                        TB.TextChanged, _
                        AddressOf TextBox_TextChanged

                AddHandler _
                        TB.KeyDown, _
                        AddressOf TextBox_KeyDown

                AddHandler _
                        TB.KeyPress, _
                        AddressOf TextBox_KeyPress

                AddHandler _
                        TB.KeyUp, _
                        AddressOf TextBox_KeyUp
            Next
        End Sub

        Private Sub TextBox_KeyDown _
                (ByVal sender As Object, _
                 ByVal e As System.Windows.Forms.KeyEventArgs)

            Dim TB As TextBox = DirectCast(sender, TextBox)
            Console.WriteLine("KeyDown: " & TB.Name)

        End Sub

        Private Sub TextBox_KeyPress _
                (ByVal sender As Object, _
                 ByVal e As System.Windows.Forms.KeyPressEventArgs)

            Dim TB As TextBox = DirectCast(sender, TextBox)
            Console.WriteLine("KeyPress: " & TB.Name)

            If e.KeyChar = Chr(Keys.Enter) Then
                Select Case TB.Name
                    Case "Textbox1"
                        Me.Controls("Textbox2").Focus()
                    Case "Textbox2"
                        Me.Controls("Textbox3").Focus()
                    Case "Textbox3"
                        Me.Controls("Textbox4").Focus()
                    Case "Textbox4"
                        Me.Controls("Textbox5").Focus()
                    Case "Textbox5"
                        Me.Controls("Textbox1").Focus()
                End Select

                ' Beep beim Drücken der Eingabetaste unterdrücken
                e.Handled = True
            End If
        End Sub

        Private Sub TextBox_KeyUp _
                (ByVal sender As Object, _
                 ByVal e As System.Windows.Forms.KeyEventArgs)

            Dim TB As TextBox = DirectCast(sender, TextBox)
            Console.WriteLine("Key_Up: " & TB.Name)
        End Sub

        Private Sub TextBox_TextChanged _
                (ByVal sender As System.Object, _
                 ByVal e As System.EventArgs)

            Dim TB As TextBox = DirectCast(sender, TextBox)
            Console.WriteLine("TextChanged: " & TB.Name)

        End Sub
    End Class
    ' \\\ E N T E

    Auf eine einzelne dieser Textboxen kannst Du z.B. via

        dim TB As Textbox
        TB = DirectCast(Me.Controls("Textbox1"), Textbox)

    zugreifen.

    Gruß aus St.Georgen
    Peter Götz
    www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

    Montag, 16. August 2010 11:34

Alle Antworten

  • Hallo,


    in einem Formular lege ich mehrere Textboxen an (siehe Code).
    Wie kann ich jetzt bei den Textboxen auf das OnKeyDown-Ereignis reagieren ?

    for count = 1 to ParameterFeldAnzahl
    Parameter(count) = New TextBox
    Parameter(count).Left = ParameterFeldLinks
    Parameter(count).Top = ParameterFeldOben +  ParameterFeldVertVersatz* (count - 1)
    Parameter(count).Width = ParameterFeldBreit
    Parameter(count).Height = ParameterFeldHoch
    Me.Controls.Add(Parameter(count))
    Parameter(count).Show()
    Next

    Wenn in den Textboxen Text eingegeben und anschlissend die Entertatse gedrückt wird soll der Text verarbeitet werden.

    Über die AddHandler Anweisung kannst Du Ereignismethoden zuweisen. Die Signatur dieser Methode muss dabei dem Ereignishandler entsprechen. Für das KeyDown Ereignis wäre dies wie folgt:

     Private Sub TextBoxKeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs)
    
     End Sub

    Der Parameter 'sender' liefert Dir immer die TextBox, die das Ereignis ausgelöst hat. Jetzt kannst Du in Deiner Schleife diese Methode dem KeyDown Ereignis zuweisen:

    AddHandler Parameter(count).KeyDown, AddressOf TextBoxKeyDown
    

    Mit der RemoveHandler Anweisung kannst Du die Zuweisung wieder auflösen.

    AddHandler und RemoveHandler
    http://msdn.microsoft.com/de-de/library/6yyk8z93(VS.90).aspx


    Thorsten Dörfler
    Microsoft MVP Visual Basic
    vb-faq.de
    Montag, 16. August 2010 11:05
  • Danke für die schnelle Hilfe.

    Montag, 16. August 2010 11:13
  • Hallo,

    in einem Formular lege ich mehrere Textboxen an (siehe Code).
    Wie kann ich jetzt bei den Textboxen auf das OnKeyDown-Ereignis
    reagieren ?

    Das nachfolgende Beispiel zeigt Dir, wie Du mehrere Textboxen
    erstellen kannst und diesen die Ereignisprozeduren (Eventhandler)
    KeyDown, KeyPress, KeyUp u. TextChanged zuweisen und später
    auch wieder entfernen kannst.

    Kopiere nachfolgenden Code in ein leeres Formmodul (Form1.vb)

    ' / Beginn Code Form1.vb
    Public Class Form1
        Private Sub Form1_FormClosing _
                (ByVal sender As Object, _
                 ByVal e As System.Windows.Forms.FormClosingEventArgs _
                ) Handles Me.FormClosing

            Dim i As Integer

            ' Eventhandler entfernen
            For i = 1 To 5
                Dim TB As TextBox = _
                    DirectCast(Me.Controls("Textbox" & i.ToString), TextBox)

                RemoveHandler _
                        TB.TextChanged, _
                        AddressOf TextBox_TextChanged

                RemoveHandler _
                        TB.KeyDown, _
                        AddressOf TextBox_KeyDown

                RemoveHandler _
                        TB.KeyPress, _
                        AddressOf TextBox_KeyPress

                RemoveHandler _
                        TB.KeyUp, _
                        AddressOf TextBox_KeyUp
            Next

        End Sub

        Private Sub Form1_Load _
                (ByVal sender As System.Object, _
                 ByVal e As System.EventArgs _
                 ) Handles MyBase.Load

            CreateControls()
        End Sub

        Private Sub CreateControls()
            Dim i As Integer
            Dim TB As TextBox
            Dim Top As Integer = 15
            Dim Fnt As New Font("Arial", 12)

            For i = 1 To 5
                TB = New TextBox
                With TB
                    .Name = "Textbox" & i.ToString
                    .Font = Fnt
                    .SetBounds _
                            (10, Top, _
                             Me.ClientSize.Width - 20, _
                             .Height)

                    .Anchor = _
                            AnchorStyles.Left Or _
                            AnchorStyles.Top Or _
                            AnchorStyles.Right

                    .Text = .Name
                    Top = TB.Bottom + 10
                End With
                Me.Controls.Add(TB)

                ' Eventhandler hinzufügen
                AddHandler _
                        TB.TextChanged, _
                        AddressOf TextBox_TextChanged

                AddHandler _
                        TB.KeyDown, _
                        AddressOf TextBox_KeyDown

                AddHandler _
                        TB.KeyPress, _
                        AddressOf TextBox_KeyPress

                AddHandler _
                        TB.KeyUp, _
                        AddressOf TextBox_KeyUp
            Next
        End Sub

        Private Sub TextBox_KeyDown _
                (ByVal sender As Object, _
                 ByVal e As System.Windows.Forms.KeyEventArgs)

            Dim TB As TextBox = DirectCast(sender, TextBox)
            Console.WriteLine("KeyDown: " & TB.Name)

        End Sub

        Private Sub TextBox_KeyPress _
                (ByVal sender As Object, _
                 ByVal e As System.Windows.Forms.KeyPressEventArgs)

            Dim TB As TextBox = DirectCast(sender, TextBox)
            Console.WriteLine("KeyPress: " & TB.Name)

            If e.KeyChar = Chr(Keys.Enter) Then
                Select Case TB.Name
                    Case "Textbox1"
                        Me.Controls("Textbox2").Focus()
                    Case "Textbox2"
                        Me.Controls("Textbox3").Focus()
                    Case "Textbox3"
                        Me.Controls("Textbox4").Focus()
                    Case "Textbox4"
                        Me.Controls("Textbox5").Focus()
                    Case "Textbox5"
                        Me.Controls("Textbox1").Focus()
                End Select

                ' Beep beim Drücken der Eingabetaste unterdrücken
                e.Handled = True
            End If
        End Sub

        Private Sub TextBox_KeyUp _
                (ByVal sender As Object, _
                 ByVal e As System.Windows.Forms.KeyEventArgs)

            Dim TB As TextBox = DirectCast(sender, TextBox)
            Console.WriteLine("Key_Up: " & TB.Name)
        End Sub

        Private Sub TextBox_TextChanged _
                (ByVal sender As System.Object, _
                 ByVal e As System.EventArgs)

            Dim TB As TextBox = DirectCast(sender, TextBox)
            Console.WriteLine("TextChanged: " & TB.Name)

        End Sub
    End Class
    ' \\\ E N T E

    Auf eine einzelne dieser Textboxen kannst Du z.B. via

        dim TB As Textbox
        TB = DirectCast(Me.Controls("Textbox1"), Textbox)

    zugreifen.

    Gruß aus St.Georgen
    Peter Götz
    www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

    Montag, 16. August 2010 11:34