Abfragen welcher Button gedrückt wurde?

  • VB.NET

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Abfragen welcher Button gedrückt wurde?

    Hallo,
    ist es möglich in einem Timer abzufragen welcher Button gedrückt wurde?
    Ich möchte auf einen Button drücken, um einen Timer zu starten. Und ich brauche mehrere Timer..
    Ich hab mir das in etwa so vorgestellt:

    if Button1.wurde gedrückt then
    ...
    elseif button2.wurde gedrückt then
    usw.

    MfG
    greetz90
    Wozu brauchst Du mehrere Timer?
    Probier mal dies:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click, Button3.Click
    2. If sender Is Button1 Then
    3. ' 1
    4. ElseIf sender Is Button2 Then
    5. ' 2
    6. ElseIf sender Is Button3 Then
    7. ' 3
    8. End If
    9. 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!
    Danke für die schnellen antworten, es klappt aber noch nicht ganz, weiß aber nicht warum o_O
    Label1,Label2:

    VB.NET-Quellcode

    1. Timer1.start



    Timer1:

    VB.NET-Quellcode

    1. If sender Is Label1 Then
    2. If Flitzer.Location.X >= 6 Then
    3. Flitzer.Location = New Point((Flitzer.Location.X) - 30, 70)
    4. Else
    5. Flitzer.Location = New Point((Flitzer.Location.X) + 30, 70)
    6. End If
    7. If Flitzer.Location.X = 6 Then
    8. Timer1.Stop()
    9. End If
    10. ElseIf sender Is Label2 Then
    11. If Flitzer.Location.X >= 96 Then
    12. Flitzer.Location = New Point((Flitzer.Location.X) - 30, 70)
    13. Else
    14. Flitzer.Location = New Point((Flitzer.Location.X) + 30, 70)
    15. End If
    16. If Flitzer.Location.X = 96 Then
    17. Timer1.Stop()
    18. End If
    19. End If


    Flitzer ist eine Picturebox, und die soll sich halt über die Label bewegen, wenn man auf sie drückt..

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

    VB.NET-Quellcode

    1. If sender Is Label1 Then

    Welches Event löst denn das Label aus?
    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!

    RodFromGermany schrieb:

    Welches Event löst denn das Label aus?
    Na diese Abfragen:

    VB.NET-Quellcode

    1. If Flitzer.Location.X >= 6 Then Flitzer.Location = New Point((Flitzer.Location.X) - 30, 70)
    2. Else
    3. Flitzer.Location = New Point((Flitzer.Location.X) + 30, 70)
    4. End If
    5. If Flitzer.Location.X = 6 Then
    6. Timer1.Stop() End If


    Also wenn Flitzers location kleiner als 6 is, soll der nach links sliden, wenn x größer als 6 is, dann nach rechts.
    Und wenn X = 6 ist, soll er stehen bleiben, und der Timer wird stoppt.

    Wenn ich es ohne
    If send Is Label1 then..
    mache funktioniert es einwandfrei, nur brauch ich dann 2 Timer, für jedes Label dann einen.
    Und wenn ich das mit mehreren mache, brauch ich für jedes Label einen Timer..

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

    mcdt schrieb:

    aber ich meine das die abfrage ala "if sender is XXX ..."nur den Typ des senders prüft und nicht den namen.
    versuche es mal mit "if sender.name = "label1 ..."

    Versuch mal dies:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click, Button3.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. End If
    9. 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!
    Versuch mal dies:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click, Button3.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. End If
    9. End Sub
    Also mit den MsgBoxen funktioniert es ja, nur möchte ich, wenn sender z.b. label1 ist, dass das Event (die schleife) mehrmals abläuft, und zwar bis X eine Bestimmte Zahl hat.
    Nun hab ich einen Private sub mit handle Label1-4.click, timer1.start
    und darein das mit dem sender Is..
    Dann geht die picturebox bei jedem Klick je nachdem x +/- 30 nach links oder rechts.
    Aber es soll ja solange x +/- 30 passieren, bis X = eine Zahl ist.
    @Rod:
    Seltsam, aber in VB funktioniert die von dir gepostete Lösung wirklich.
    Hätte ich nicht gedacht, da der "Is" operator dafür da ist um eine Typprüfung durchzuführen.
    Button1,Button2,... ist ja kein Typ, sondern ein Objekt der Button Klasse.
    Hier auch der Auszug aus der MSDN
    Das Is-Schlüsselwort wird mit dem TypeOf-Schlüsselwort in einem TypeOf...Is-Ausdruck verwendet, um zu prüfen, ob der Laufzeittyp eines Ausdrucks mit dem vorgegebenen Typ kompatibel ist.

    In C# würde die gepostet Lösung (sender mit Button1 mittels "Is-Operator" auswerten) übrigens so nicht funktionieren.
    @greetz90 : Ja und?

    VB.NET-Quellcode

    1. Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label1.Click, Label2.Click, Label3.Click, Label4.Click
    2. If sender Is Label1 Then
    3. ' tue dies
    4. ElseIf sender Is Label2 Then
    5. ' tue jenes
    6. ElseIf sender Is Label3 Then
    7. ' tue das hier
    8. End If
    9. End Sub

    Laass doch mal außer Zitaten von anderen mal Code von Dir sehen. Dann werden Sie geholfen.
    @mcdt: So isses:

    Quellcode

    1. if (object.ReferenceEquals(sender, button1)) { MessageBox.Show("Button1"); }
    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!

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

    So funktioniert es nur teilweise, "Flitzer" slidet nich bis X 96 ist, sondern, nur einmal + 30, weil X < 6 ist.
    Soll aber so oft +30 gehen, bis er bei 96 angelangt ist.



    Private Sub Labels_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Injector.Click, Crosshair.Click, Chat.Click, Spammer.Click, Timer2.Tick
    Timer1.Start()
    Timer2.Start()
    If sender Is Injector Then
    MessageBox.Show("Button1")
    ElseIf sender Is Crosshair Then
    If Flitzer.Location.X >= 96 Then
    Flitzer.Location = New Point((Flitzer.Location.X) - 30, 70)
    Timer2.Start()
    Else
    Flitzer.Location = New Point((Flitzer.Location.X) + 30, 70)
    End If
    If Flitzer.Location.X = 96 Then
    Timer2.Stop()
    End If
    ElseIf sender Is Spammer Then
    MessageBox.Show("Button3")
    ElseIf sender Is Chat Then
    MessageBox.Show("Button4")
    End If
    End Sub
    Ich will jetzt nicht alles verstehen, aber mir fällt auf, dass in der 3. Zeile Timer2.Start() steht und weiter unten noch mal in einer If-Konstruktion.
    Ist das so gewollt?
    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!
    @greetz90:
    Du musst nicht immer den ganzen Post zitieren, wenn Du einen Autor ansprechen willst.
    Da genügt sein Name, das ist kürzer und übersichtlicher. :thumbsup:
    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!