Prüfen welcher Button angeklickt wurde...

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von Nofear23m.

    Prüfen welcher Button angeklickt wurde...

    HI HO....

    Ich möchte mein Code etwas verkleinern darum will ich in einer Methode eine abfrage starten. Weis grad nur nicht wie...

    Ich will das meine Methode Prüft welcher Button angewählt wurde z.b. ich mache in jeden Button Click Testmethode() und dann soll er eine IF starten wenn Button 1 geklickt wurde mach dies ... Button 2 mach das .... usw....

    Mein ergebnis ?(

    VB.NET-Quellcode

    1. If Button9_Click() Then
    2. Label.Text = "TESTAKTION"
    3. 'hier geht's dan weiter mit Button 2 etc.
    4. End If

    Naja, das ist doch voll das gewurschtel... Sicher das das Sinnvoll ist?

    Wie auch immer. Du kannst allen Buttons das gleiche Click Event zuweisen. Dort kannst du das sender Objekt zum Button Casten und dann prüfen welchen Namen dieser hat.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    @mrMo Jou.
    @VBHunter poste mal einen etwas umfangreicheren Code.
    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!
    Ja denke schon das es Sinnvoll ist, weil ich dadruck einige Zeilen Sparen würde (bin jetzt bei gut 30.000) und wenn hier 5 Buttons vereint werden können und die Methode es dann so ausfüht ist es doch super :D

    Leider hast du zu viele wörter in dein Satz die ich noch nicht zu 100% verstehe deshalb hab ich gerade kein bild vor augen wie du es meinst. ;(

    Du kannst allen Buttons das gleiche Click Event zuweisen

    meinst du damit das ich Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    bei allen das Handles gleich mache ?

    also mein Problem liegt nach dem IF ... wie frage ich mein Button ab .... IF (Button 1 angewält) Then .... :/

    EDIT:

    Okay @RodFromGermany Ich schreib hier jetzt mal ein beispiel wie es z.b. sein soll:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Fahrzeugkaufen()
    3. End Sub
    4. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    5. Fahrzeugkaufen()
    6. End Sub
    7. Private Sub Fahrzeugkaufen()
    8. If Button1_Click() Then
    9. 'Kaufe einen Sprinter
    10. 'Es wird geld abgezogen .... €
    11. 'usw.... das ist kein problem
    12. ElseIf Button2_Click() Then
    13. 'Kaufe eine Pritsche
    14. 'Es wird geld abgezogen .... €
    15. 'usw....
    16. End If
    17. End Sub]

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

    Meinst du sowas?

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click, Button2.Click, Button3.Click, Button4.Click
    2. Select Case True
    3. Case sender Is Button1
    4. MessageBox.Show(sender.ToString)
    5. Case sender Is Button2
    6. MessageBox.Show(sender.ToString)
    7. Case sender Is Button3
    8. MessageBox.Show(sender.ToString)
    9. Case sender Is Button4
    10. MessageBox.Show(sender.ToString)
    11. End Select
    12. End Sub

    VBHunter schrieb:

    Ja denke schon das es Sinnvoll ist, weil ich dadurch einige Zeilen Sparen würde (bin jetzt bei gut 30.000)


    30.000 Zeilen Spaghetti Code in der/den Form/s oder schön sauber Objektorientiert aufgeteilt in Klassen? Ich tippe auf ersteres.

    Hätte man für deine Fahrzeuge eine eigene Klasse, könnte man z.B. Im Click Event ein neues Objekt "Fahrzeug" instanziieren und dieses dann an die Methode Fahrzeugkaufen übergeben und weiter verarbeiten.

    Ich halte deinen Wunsch für nur begrenzt sinnvoll, aber wenn de meinst. So ähnlich wie im Beispiel von @EpagneulBreton meinte ich das vorhin.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    VBHunter schrieb:

    VB.NET-Quellcode

    1. Fahrzeugkaufen()
    Ich denke mal, das bleibt nicht bei zwei Buttons, die da unterschieden werden sollen.
    Erstell ein Enum, das alle Fälle auflistet und gib dieser Prozedur das entsprechende Enum mit.

    VB.NET-Quellcode

    1. Enum Kaufen
    2. Sprinter
    3. Pritsche
    4. End Enum
    5. Private Sub Fahrzeugkaufen(was As Kaufen)
    6. Select Case (was)
    7. ' alle aufzählen
    8. End Select
    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!
    Sehr gut @RodFromGermany genau das ist es was ich suchte..... vielen dank !!!

    natürlich auch an die anderen.

    so sieht es jetzt aus:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Fahrzeugkauf(Fahrzeugart.Sprinter)
    3. End Sub
    4. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    5. Fahrzeugkauf(Fahrzeugart.Pritsche)
    6. End Sub
    7. Enum Fahrzeugart
    8. Sprinter
    9. Pritsche
    10. End Enum
    11. Private Sub FahrzeugkaufSprinter(Auswahl As Fahrzeugart)
    12. Select Case (Auswahl)
    13. Case Kaufen.Sprinter
    14. MessageBox.Show("Button 1 Sprinter wurde betätigt", "Information")
    15. Case Kaufen.Pritsche
    16. MessageBox.Show("Button 2 Pritsche wurde betätigt", "Information")
    17. End Select
    18. End Sub
    Sorry, das ich mich hier ganz frech einmische =O
    @VBHunter
    Kannst du dich an deinen ersten Post erinnern? Ich habe dir damals gezeigt wie man mit Klassen Programmiert und seinen Code übersichtlich hält.
    Das hat dich nicht interessiert und du meintest, ist in der Form ja auch gut aufgehoben.

    Tja, hier hast du die Quittung, und glaub mir, das wird noch viel schlimmer. Schau dir den Code mal in 6 Monaten an. Da weist du zu 100% mal nicht mehr wo welcher Code ist und was der genau macht.
    Früher oder später solltest du echt Anfangen auf die Leute hier zu hören und die Ratschläge auch umzusetzen. (und nicht erst beim 10. mal)

    Du weist das ich das in keinster Weise böse meine, soweit sind wir ja schon. Aber denke mal zurück an deinen ersten Post oder lese Ihn nochmals durch. Du wirst lachen. :thumbsup:

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    @Nofear23m So was nennen wir beratungsresistent. :D
    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!
    :Dnatürlich @Nofear23m hab ich gelernt und deshalb hab ich oben geschrieben das es ein Test ist ... sprich ich habe eine Neue Form erstellt und nur das drin was ich hier gepoastet habe ...

    Ich teste momentan immer so kleine sachen die mir einfallen, die ich einbauen könnte und mache je eine neue Form (TUTs) und nach und nach versuche ich es umzusetzen in mein Hauptspiel ;)

    dort existieren namen wie:
    lbl_name
    bt_home
    usw.... alles strukuriert damit ich den überblick nicht verliere, wenn doch ist ein 'Infotext .... hinter.

    VBHunter schrieb:

    sprich ich habe eine Neue Form erstellt und nur das drin was ich hier gepoastet habe

    Das ist schön, trotzdem schreibst du von 30.000 Zeilen. Im Idealfall hast du so gut wie gar keinen Code in der "Form". Ich sage jetzt, alles was unter 100 Zeile Code in der Form-CodeBehind ist ist "verträglich".

    VBHunter schrieb:

    alles strukuriert damit ich den überblick nicht verliere

    OK, VbHunter. Nochmal, ich bin heute in der Laune der Erklärbär zu spielen 8o .
    Wir nehmen an das wir das einfach Beispiel haben, das wir eine App bauen welche Hotels verwaltet und deren Buchungen. Simpel. Da hätten wir mehrere Klassen wie:
    • Hotel (hält ein Hotel mit deren Eigenschaften)
    • Atraktion (z.b. JetSki oder Kamelreiten)
    • Buchung (hält die Infos wer wann, wo, wie gebucht hat)
    • Hotelsuche
    • Gast (die Infos über den Gast)
    • Tarife
    • usw.
    Die Klassen sind untereinander wiederum verknüpft. Denn Ein Hotel hat ja Atraktionen und Buchungen sowie verschiedene Tarife.
    Ein Gast hat auch Buchungen.... usw.

    Die Klassen halten dir nicht nur alle Informationen sondern kümmern sich auch um diverse Berechnungen und/oder evtl. das Daten speichern und laden.
    Sie beinhalten Prozeduren (Sub() Function() usw.) welche du einfach nur ansprechen musst um gewisse Operationen durchführen zu müssen.
    So hast du den Code um z.b. für einen Gast eine Buchung anzulegen und diese einem Hotel zuzuordnen in einer Sub() enthalten und musst in deinem Code keine 40 Zeile schreiben sondern nur:
    myHotel.Buchungen.Add(aktuellerGast,aktuellerTermin)
    Das hilft nicht nur die Wartbarkeit des Code auf einem angemessenem Neveau zu halten sondern auch bei der Skalierbarkeit.
    Dein "Spiel" wird ja sicher immer Größer und du wirst immer wieder an stellen kommen wo du einfach immer und immer wieder "herummurksen" musst um diese Stelle so abzuändern das diese auch weiterhin deinen Anforderungen entspricht.

    Als du deinen ersten Post erstellt hattest, wollte ich dich gleich in die Objektorientierte Welt einführen, ja VB.Net ist Objektorientiert, denn nur so hast du auf dauer die Chance das dein Code überlebt.
    Im Endeffekt (früher oder später. Bei dir anscheinend später) wirst du deinen Code so wie er gerade ist einfach verwerfen, auch wenn du es jetzt noch nicht erkennst.
    Damit meine ich einfach, du wirst Ihne neu machen.

    Ich würde MIR nicht zutrauen ein Spiel rein in CodeBehind zu machen. Ich denke ICH würde mich nach 3 Tagen nicht mehr zurechtfinden.
    Jeder kennt das. Man Bastelt etwas und nur weil man währendessen keine Ordnung gehalten hat sucht man nach einer Zeit immer öfter sein Werkzeug. Mist, ich hatte doch gerade den 10er Schlüssel und den Schraubendreher.
    So ist das vergleichbar. Irgendwann mal bist du nur noch am suchen!!!

    Sooooo, und jetzt gibst du dir nochmal nen Ruck, und siehst dir an wie man Klassen erstellt und Strukturiert.
    Gerne kannst du und anhand von Fallbeispielen fragen, dafür ist das Forum ja da, und dann wird das auch was mit deinem Spiel.

    Aber ehrlich, es hat ja keinen Sinn wenn du alle Tage an einem anderen (ähnlichem) Problem hängst, nur weil du ganz falsch an die Sache herangehst.
    Ich habe deine Threads jetzt eine Weile ignoriert, du weist... ich habs am Anfang versucht, aber irgendiwe kann ich das leid nicht mitansehen.
    Bitte höre auf die Leute hier im Forum, die wissen von was sie sprechen.

    Und noch eines zu Schluss. Wenn dir @RodFromGermany und/oder @ErfinderDesRades oder andere (will jetzt nicht jeden markieren, sorry) einen Link posten oder einen Rat geben, dann machen die das nicht weil sie gerade ne URL in der Zwischenablage hatten. Die suchen den Thread/das Tutorial mühsahm heraus um dir dann den Link auf dem Silbertablett zu geben. Kannst du dir vorstellen wie sich die fühlen wenn du Ihn dann ignorierst.
    Zwei Posts später taucht der selbe Mist in deinem Code auf und man weis genau, er hats nicht mal gelesen.
    Die Frage ist wohl, wie lange die Geduld der Helfer reicht?

    Sorry, bitte nehm es nicht Böse. Ich musste das nun mal loswerden, in der Hoffnung es bringt dich in die richtige Richtung, manchesmal bedarfs es doch auch mal eines beherzigten schubsers.

    Schöne Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##