dynamic_cast???



  • Hallo, ich habe gerade meine erste C# Applikation geschrieben, nämlich einen kleinen Taschenrechner.

    Die Zahlen sind als Buttons dargestellt und das zugehörige Event für jedes dieser Zahlen ist: onClickedNumber(object who, EventArg e);.

    Nun stellt sich mir die Frage wie kann ich "object who" wieder zurück casten zu einem Button, um desses .Text Attribut herauszulesen? In C++ würde ich wahrscheinlich dynamic_cast verwenden, gibts in C# etwas dergleichen?

    Momentan löse ich das so:

    private void onClickedNumber(object who, EventArgs e) {
            // Is there an easier way?  (C++ dynamic_cast?)
            for (byte i = 0; i < 10; i++) {
                if (who == m_allNumbers[i]) {
                }
            }
        }
    

    Danke bereits im voraus!



  • Button b = who as Button;
    MessageBox.Show(b.Text);
    


  • Firefighter schrieb:

    Button b = who as Button;
    MessageBox.Show(b.Text);
    

    Dankeschön! Genau sowas hab ich gesucht



  • Oder

    Button _newButton = (Button)sender;
    


  • Doug_HH schrieb:

    Oder

    Button _newButton = (Button)sender;
    

    Das ist glaube ich eher ein static_cast , da, wenn die Konvertierung schief geht, eine Ausnahmne ausgelöst wird und bei as nur null zurückgegeben wird (Auf das man auch Überprüfen sollte!).



  • Hast wohl recht, ist die besser Lösung...

    Button _a = sender as Button;
    
    if (_a != null)
    {
             MessageBox.Show(_a.Name);
    }
    else
    {
             MessageBox.Show("Kein Button");
    }
    


  • Anzumerken sei aber noch das "as" nur für Typen funktionieren die auch null sein können.



  • Das ist hier aber nicht so schlimm, da es ja um ein 'object' handelt.


Log in to reply