"Click"-Ereignis von mehreren Buttons gleichzeitig abfragen

  • VB.NET

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

    "Click"-Ereignis von mehreren Buttons gleichzeitig abfragen

    Guten Morgen!

    Ich habe mehrere Buttons, die jeweils bei einem Klick darauf ihre Farbe in Rot ändern, bzw. wenn sie schon Rot sind, in grau.

    Problem: Ich möchte jetzt nicht für die Felder einzeln eine Abfrage schreiben.
    Gibt es eine Möglichkeit, auf das Klick-Ereignis von diesen Buttons immer den gleichen Code auszuführen?


    Gruß Daniel
    Du könntest, wenn die Buttons im Designer hergestellt worden sind, alle Buttons, denen du den Code zuweisen möchtest Markieren, dann einen Markierten Doppelkiclekn und den Code angeben.

    dir wird dann auch aufflallen, dass am ende des Button_Click-Subs alle Handles der markierten Button aufgezählt sind

    grüße
    Danny233223
    zb:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(...) Handles Button1.Click, Button2.Click, Button3.Click, usw
    2. ...
    3. End Sub

    also einfach für jeden Button das entsprechende Event an "Handles" anhängen

    oder mit "AddHandler"

    VB.NET-Quellcode

    1. AddHandler Button1.Click, AddressOf AnyButton_Click
    2. AddHandler Button2.Click, AddressOf AnyButton_Click
    3. usw


    Da die EventHandler Prozedur den "sender" übergibt, kann man den dann "casten" und mit dem Objekt was machen.

    VB.NET-Quellcode

    1. If TypeOf sender Is Button Then
    2. Dim bt As Button = DirectCast(sender, Button)
    3. bt.Text &= "."
    4. End If

    picoflop schrieb:

    Da die EventHandler Prozedur den "sender" übergibt, kann man den dann "casten" und mit dem Objekt was machen.

    Visual Basic Quellcode
    1
    2
    3
    4
    If TypeOf sender Is Button Then
    Dim bt As Button = DirectCast(sender, Button)
    bt.Text &= "."
    End If
    Genau das war meine nächste Frage ;)

    Hab mich nämlich oben falsch ausgedrückt, jedes Mal den selben Code ausführen will ich natürlich nicht.
    Stricke das jetzt mal für mein Problem um.

    Vielen Dank schonmal.

    (Gibt es hier im Forum eigentlich die Möglichkeit, einen User zu bewerten o.ä.)?
    So, hab jetzt folgenden Code:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. AddHandler Button1.Click, AddressOf AnyButton_ClickAddHandler Button2.Click, AddressOf AnyButton_ClickMsgBox("a")
    3. End Sub
    4. Sub AnyButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
    5. MsgBox("b")
    6. End Sub


    Problem: Wenn ich auf Button1 klicke, bekomme ich MsgBox mit "a" angezeigt. Beim zweiten Mal klicken "a", dann "b". Beim dritten Mal dann "a","b","b" usw.
    Auf Button2 bekomme ich nur was, wenn ich vorher auf Button1 geklickt habe. Und dann auch wieder "b" in der jeweiligen Anzahl der klicks.

    Bin hier grad am grübeln, aber mir ist noch nicht ganz klar, wieso das so ist...
    Weil du das Prinzip wohl noch nciht verstanden hast.

    Addhandler fügt einem Button ein Handler hinzu.. das heisst, Beim ersten Klick greift das normale Click Event, mit dem Handle Button1.click.
    Nun fügst du beiden Buttons einen gemeinsamen Handler hinzu. Folge.
    Beim nächsten Klick auf Button1, wird das normal click event, und zusätzlich dein click event ausgeführt.
    In dem "Normalen" Click event, wird beiden Buttons ein weitere Handler hinzugefügt, der das Click event handlet ( jetzt sinds schon 3 handler für click).
    Sprich wenn du 10 mal klickst, hast du für button2 10 handles, für button1 11....

    Also...

    Du solltest nicht in einem Button Click Event ein Handle für die Buttons hinzufügen.
    Dies tut man üblichweise in einem Event, was unabhängig von den Buttons ist. Z.B im Form Load o.ä.
    Dort durchläufst du in einer Schleife alle Buttons, und fügst jedem einen neuen Handler hinzu.

    VB.NET-Quellcode

    1. Sub Form_load
    2. For each but ...
    3. mybutt = directcast(but,Button)
    4. addhandler mybutt.click, addressOf myClickevent
    5. next
    6. 'iwas
    7. End sub
    8. Sub myClickevent(sender,e...)
    9. CurrentClickedButton = DirectCast(sender,Button)
    10. End Sub
    Das ist meine Signatur und sie wird wunderbar sein!

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