Button Click Event abfragen

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von SpaceyX.

    Button Click Event abfragen

    Hallo. Also ich möchte gerne, wenn möglich mit If oder Case abfragen ob Button1 geklickt wurde und dann eben eine Aktion ausführen. Habe gelesen das geht irgendwie mit Addhandler und AdressOf? ?(
    Wenn zur Laufzeit:

    VB.NET-Quellcode

    1. AddHandler Button1.Click, AddressOf <Subname>_click


    Wenn nicht:
    Nimm einfach das Click-Event.


    @require
    Ranz

    Edit: zu langsam
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Oder du machst dir ne Variable, welche das angibt:

    VB.NET-Quellcode

    1. Dim Button1AlreadyClicked As Boolean = False
    2. AddHandler Button1.Click, Sub() Button1AlreadyClicked = True
    @Artentus:, @LaMiy:,@nafets3646:
    Ich bennene mal kurz meine Controls:
    2 txtlabel
    2 buttons
    Ich möchte sagen:

    VB.NET-Quellcode

    1. If TextLabel1.Text = "Beispieltext" And Button2.Clicked Then
    2. ...
    3. End

    Das steht dann im Button1. Heißt also ich möchte in einem Button abfragen ob der andere geklickt wurde. Durch bestimmte klicks ändert sich dann der Text. Das Problem hierbei ist, dass immer wieder abgefragt wird ob der andere Button geklickt wurde.
    Click ist ein Event, kein Zustand. Soll heißen, ein Button kann geklickt werden, und du kannst dich dann darüber informieren lassen. Du kannst aber nicht abfragen, ob der Button geklickt ist, denn das ist ja nur ein kurzer Augenblick.
    Wenn du abfragen möchtest, ob der Button irgendwann mal geklickt wurde, dann ist nafets Lösung die richtige.

    Und zu diesem "And" sag ich nur folgendes: *Link*
    @LaMiy
    Dann schon. Ich hab es aber anders verstanden.

    @Xylon

    VB.NET-Quellcode

    1. If TextLabel1.Text = "bla" AndAlso sender Is Button2 Then


    Ist aber Pseudo-Code. Besser wäre es hier zu casten.
    Zudem ist das eher in nem Timer abzufragen... Aber das ist ebenfalls unperformant! Also will ich dich dazu nicht anstiften, da das dann auch ein wenig unter die Kategorie "Polling" fallen könnte.
    Wenn aber nimm auf jeden Fall nen System.Timers.Timer...

    Schande über mein Haupt.
    Ich muss mich da allerdings bei @require entschuldigen. Diese Möglichkeit besteht natürlich auch!
    Du kannst diesen Code hier aber auch in ein selbst erstelltes Sub schreiben, dass du mit AddHandler und AddressOf aufrufen kannst.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

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

    Klar kann man feststellen, ob der Button geklickt wurde @Artentus

    VB.NET-Quellcode

    1. Public Class ButtonCount : Inherits Button
    2. Private _isClicked As Boolean = False
    3. Public ReadOnly Property IsClicked As Boolean
    4. Get
    5. Return _isClicked
    6. End Get
    7. End Property
    8. Public Property ClickCount As Integer = 0
    9. Protected Overrides Sub OnClick(e As EventArgs)
    10. If Not IsClicked Then
    11. _isClicked = True
    12. End If
    13. ClickCount += 1
    14. MyBase.OnClick(e)
    15. End Sub
    16. End Class


    Man bastelt sich seinen eigenen Button, der genau das kann.....
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    @Artentus:, @SpaceyX: Um den Counter geht es gar nicht, dafür benutze ich einen Static Counter und erhöhe den immer weils einfacher ist. Das einzige Problem ist nur der andere Button. Vielleicht hilf es wenn ich mal mit einem Beispiel erkläre was ich überhaupt erreichen will.
    Zunächst setzte ich dies für Spieleprogrammierung ein, ich habe es nur deshalb hier gepostet weil es ja zum allgemeinen programmieren gehört. Es geht hierbei um einen Dialog. Nehmen wir mal an es gibt 2 Personen, A und B. A sagt zunächst etwas. Allerdings musste ich einen Button einbauen der dann immer den Text von A ändert weil dieser zu lang ist. Alllsooo:
    A: H
    A: A
    A: LL
    A: O

    Mit Button1 wird immer der neue Text angezeigt. Ich möchte nun sagen, dass wenn der Text = H ist und der Button2 geklickt wurde, dass dann B "spricht". Versteht ihr? Also z.B. wenn man bei
    A: H den Button klickt kommt B's text.
    Du musst Daten von der GUI trennen. Ein Button ist nicht dazu da, um abgefragt zu werden, ob er geklickt worden ist. Er wird gedrück, löst sein Event aus. Das wars von seiner Seite aus. Er speichert keine Daten. Leg Dir z. B. ein ENUM an, wo Du die "Sprecher" aufführst. Dann leg Dir eine Property dieses ENUMs an, welches den gerade Sprechenden hält. So z. B.

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private _currentSpeaker As Speaker = Speaker.SpeakerA
    3. Private Property CurrentSpeaker As Speaker
    4. Get
    5. Return _currentSpeaker
    6. End Get
    7. Set(value As Speaker)
    8. _currentSpeaker = value
    9. Me.Text = value.ToString()
    10. End Set
    11. End Property
    12. Private Enum Speaker As Integer
    13. SpeakerA = 0
    14. SpeakerB = 1
    15. End Enum
    16. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    17. CurrentSpeaker = Speaker.SpeakerA
    18. End Sub
    19. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    20. CurrentSpeaker = Speaker.SpeakerB
    21. End Sub
    22. Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    23. Select Case CurrentSpeaker
    24. Case Speaker.SpeakerA
    25. TextBox1.AppendText("huhu ")
    26. Case Speaker.SpeakerB
    27. TextBox1.Clear()
    28. TextBox1.Text = "huhuuuuu"
    29. End Select
    30. End Sub
    31. End Class
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o