gleichen Event für mehrere Buttons aufrufen

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von BuddyHaus.

    gleichen Event für mehrere Buttons aufrufen

    VB.NET-Quellcode

    1. Private Sub Button_click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    2. Handles Button0.Click, Button1.Click,Button2.Click,Button3.Click 'usw
    3. ...Handlung
    4. End Sub


    Kann das anders gelöst werden?
    Bei vielen Buttons (mehr als 10?) ist das wohl ein bischen umständlich.
    Du koenntest die Handler manuell mit AddHandler hinzufuegen. So koenntest du deine Buttons in einer Schleife durchlaufen.
    Wie viele Buttons hast du denn, dass das Aufzaehlen der Namen so umstaendlich waere?

    BuddyHaus schrieb:

    Kann das anders gelöst werden?

    Wenn Du die Button über den Designer generierst, ist das die beste Lösung. Und so kannst Du die Events zuordnen:

    VB.NET-Quellcode

    1. Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click, Button3.Click, Button4.Click
    2. If sender Is Button1 Then
    3. MessageBox.Show("Button1")
    4. ElseIf sender Is Button2 Then
    5. MessageBox.Show("Button2")
    6. ElseIf sender Is Button3 Then
    7. MessageBox.Show("Button3")
    8. ElseIf sender Is Button4 Then
    9. MessageBox.Show("Button4")
    10. End If
    11. End Sub
    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!
    Habe mich vielleicht falsch ausgedrückt: Ich suche eigentlich einen Weg um nicht sagen wir mal bei 100 Buttons 100 Handles zu erstellen.
    Mit Copy und Paste ja kein Problem, ist aber unübersichtlich.

    Mal ein ausführlicheres Bsp.

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button_click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    3. Handles Button0.Click, Button1.Click, Button2.Click, Button3.Click, Button4.Click ' hier noch 100 weitere Handles
    4. ' etwas Handlung
    5. Dim SenderNr() As String = Split(DirectCast(sender, Button).Name, "n", -1) ' "n" von Button als Trennung
    6. DirectCast(Controls("Button" & SenderNr(1)), Button).Text = SenderNr(1).ToString
    7. End Sub
    8. End Class
    Stichwort: AddHandler

    VB.NET-Quellcode

    1. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    2. ' Normalform
    3. For Each btn As Button In Me.Controls.OfType(Of Button)()
    4. AddHandler btn.Click, AddressOf AnyButton_Click
    5. Next
    6. ' oder als einzeiler
    7. Array.ForEach((From b As Button In Me.Controls.OfType(Of Button)() Select b).ToArray, Sub(b As Button) AddHandler b.Click, AddressOf AnyButton_Click)
    8. End Sub
    9. Private Sub AnyButton_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    10. Dim btn = DirectCast(sender, Button)
    11. ' machwas
    12. End Sub