Sender Tag auswerten



  • Hobby_Programmierer schrieb:

    @David W
    bei as auf null zu prüfen ist sinnlos, da ich die Tags im Designer eingebe und im Programm nie ändere

    Dann brauchst du es auch nicht mit "as" casten sondern kannst hart casten wie du es zuvor hattest.
    Dann sparst du dir den Runtime Typecheck.



  • Hobby_Programmierer schrieb:

    @David W
    bei as auf null zu prüfen ist sinnlos, da ich die Tags im Designer eingebe und im Programm nie ändere

    @David W und Firefighter
    Ich programmiere ein Tic Tac Toe. Da jedesmal etwas ähnliches passieren muss, aber doch nicht gleich (wie muss der Computer reagieren...) sind mir die Tags angenehm.

    PS: Ich zwinge niemanden auch Tags zu benuzten! 😉

    Ok jedem das seine 🙂



  • Tja, wir als Profi-Progger würden sowas nie benutzen. ⚠



  • Es ist eher eine Frage des Stils und was man für Ansprüche an sich selber hat.
    Ein guter Stil ist es mMn nicht. Projekte die ich selber schreibe sollen meinen eigenen Ansprüchen genügen (was sie allerdings selten schaffen, da ich sehr selbstkritisch bin).



  • Firefighter schrieb:

    Ich persönlich finde es äußert fragwürdig in der Tag-Eigenschaft was zu speichern.

    Dem stimme ich zu.

    Warum verarbeitest Du nicht den Namen der 9 Labels.

    Ich sehe da keinen Sinn "Tag" zu verarbeiten.

    Label label = sender as Label;
    
    MessageBox.Show(label.Name);
    

    Die Abfrage welches Label geklickt wurde, machst Du über eine if-Anweisung oder einer switch-case-Anweisung...

    Label label = sender as Label;
    
    switch (label.Name)
           {
               case "label1":
                  MessageBox.Show("1");
                  break;
    
               case "label2":
                  MessageBox.Show("2");
                  break;
    
               default:
                  MessageBox.Show("3");
                  break;  
            }
    


  • var allLabels = { label1, label2, label3, ..., ... };
    
    for(int i = 0; i < allLabels.Count; ++i)
    {
        int labelIndex = i;
        allLabels[i].OnClick = (eventArgs) => ProcessLabelClick(labelIndex);
    }
    


  • Sorry kleinere Fehler im vorherigen Beispiel. So könnte man mit einer Funktion alle Labels verarbeiten anhand des Index.

    void ProcessLabelClick(int i)
    {
        MessageBox.Show(i.ToString());
    }
    
    var allLabels = new List<Label> { label1, label2 };
    
    for (int i = 0; i < allLabels.Count; ++i)
    {
        int labelIndex = i;
        allLabels[i].Click += (sender, eventArgs) => ProcessLabelClick(labelIndex);
    }
    


  • Mit einer normalen Klick Methode ginge es nach diesen Prinzip auch, da man den Sender dann mit IndexOf in der Liste suchen kann und dann den Index bekommt.



  • @guten tag und David W

    Was ist denn so schlimm?
    Und was ist der Unterschied ob ich Tag oder Name benutze?
    Und vorallem: bei Name kann ich nicht nur eine Zahl eingeben, ich will es aber direkt im Index eines Arrays weiterverwenden.



  • Was ich daran schlimm finde? Die enge Kopplung zwischen Programmlogik und Oberfläche.
    Den Namen zu verwenden finde ich genauso falsch.



  • David W schrieb:

    Den Namen zu verwenden finde ich genauso falsch.

    Ich habe seinen "Tag-Wert" völlig falsch verstanden. Habe es so verstanden, dass die auch mit "lbl0 - lbl8" gefüllt sind, dieses würde nun absolut keinen Sinn machen.



  • In die Tag Eigenschaft von lbl0 schreibe ich 0.
    In die Tag Eigenschaft von lbl1 schreibe ich 1.
    In die Tag Eigenschaft von lbl2 schreibe ich 2.

    Dann konvertiere ich den Tag in ein int, um ihn als Arrayindex zu verwenden. Wenn hierfür jemand was schöneres hat, bin ich für Anregungen dankbar.





  • Auch wenn ich 13 Jahre und auf dem Gymnasium bin, reicht mein Englisch dafür noch nicht.
    Könnte mir jemand bitte eine Kurzform dieser Seite geben?



  • Nee sorry, davon gibts keine Kurzform.
    Aber du kannst dein Englisch so trainieren wenn du versuchst es zu verstehen.



  • Du hast die MSDN doch sicherlich auch bei dir lokal installiert (und dann in deutsch), oder? Und wenn nicht dann ersetze einfach im Link "en-us" durch "de-de" - voilà.

    Aber laß dich nicht von den anderen verunsichern, dein Ansatz mit dem "Tag" ist schon in Ordnung so.

    Ansonsten kannst du dir auch mal diesen FAQ-Beitrag vom myCSharp-Forum durchlesen: Variablennamen zur Laufzeit zusammensetzen.


Anmelden zum Antworten