Name vom Event-Auslösendem control



  • Hi

    Also ich hab einige controls (in meinem fall vom typ picturebox), alle lösen bei click das selbe event aus. Wie kann im event-code herrausfinden auf welches control denn nun geklickt wurde?

    Die antwort dazu sollte recht einfach sein (denk ich mir mal so), dennoch hab ich nochnichts dazu gefunden.



  • Servus,

    bei deinen Eventparametern gibt es ein "object sender". Im Sender steckt die Information von welchem Control es ausgelöst wurde. In deinem Fall ist "sender" vom Typ "PictureBox", also kannst du ihn auch so casten.

    Bsp.:

    if (sender.GetType() == typeof(PictureBox))
    {
       PictureBox eventBox = sender as PictureBox;
    }
    

    mfg
    Hellsgore



  • hm .. funktioniert nicht so ganz bei mir. Dazu müsst ich wohl auchmal erwänen das ich C++.NET verwende. Ich hab zwar schon versucht den Code so umzubauen das es Funktioniert aber leider hatte ich damit bisjetzt noch keinen Erfolg.



  • Die Signatur des Delegates muss doch auch in C++ die selbe sein.



  • Also die sache sieht bei mir zz. so aus:

    if (sender->GetType() == __typeof(PictureBox)) 
    			{ 
    			    PictureBox *eventBox = new PictureBox();
    				eventBox = sender; //Fehler
    			}
    

    und die fehlermeldung dazu:

    cannot convert from 'System::Object __gc *' to 'System::Windows::Forms::PictureBox __gc *'

    ICh hab leider keine Ahnung wie man das Konvertiert oder hätte ich irgendwo irgendwas anders machem müssen?



  • Warum legst du mit new eine neue PictureBox an? Du musst den sender, von dem du weißt, dass er eine PictureBox ist, nach PictureBox* casten.



  • Gibts in C++.Net sowas wie as in C#?, falls ja könntest du es halt so schreiben:

    PictureBox pb = sender as PictureBox
        if(pb != null){
          ... //was du halt damit vorhast
        }
    

    Falls nicht musst du es wie gesagt einfach casten:

    if (sender->GetType() == __typeof(PictureBox)) { 
      PictureBox *eventBox = (PictureBox) sender;
      ... // mach was du willst damit :)            
    }
    


  • ah, nun funktionierts:

    if (sender->GetType() == __typeof(PictureBox)) 
    { 
    	PictureBox *eventBox = static_cast<PictureBox*>(sender);
    	MessageBox::Show(test->Name);
    }
    

    Danke für die hilfe


Anmelden zum Antworten