zusätzlicher Parameter bei Clickevent?



  • Hallo,
    ich habe Array of Pictureboxen das dynamisch mit einem Button erstellt wird.
    Bei meinem Clickevent auf eine Picturebox kann ich nur abfragen nach
    "System.Windows.Forms.PictureBox[]" bzw. System.Windows.Forms.PictureBox ausführen.

    Mein Problem:
    Wie bekomme ich die Info, welche PictureBox angeklickt wurde?
    Wie kann ich im Event den Index des Arrayelements abfragen oder noch besser einzelne Eigenschaften des Arrayelements z.B.
    BoxField [klicked Index??].Name
    Könnte man den Index als Funktionsaufruf übergeben oder den Namen der angeklickten Picturebox?

    ...  
     array< System::Windows::Forms::PictureBox^ >^ BoxField;//Deklariern: 
    ...
    private: System::Void BoxField_Click(System::Object^  sender, System::EventArgs^  e) 
     {
      this->textBox4->Text = this->textBox4->Text+"\r\n"+sender->ToString();
      this->textBox4->Text = this->textBox4->Text+"\r\n"+this->BoxField->ToString();
      this->textBox4->Text = this->textBox4->Text+"\r\n"+this->BoxField[clicked index??]->Name;// Hier ist  das Ziel :-)
    
     }
    
    ...
    //Erzeugen der Picturboxen im Array mit Button Karten:
    private: System::Void Karten_Click(System::Object^  sender, System::EventArgs^  e) 
    		 {
                  BoxField[i] = gcnew System::Windows::Forms::PictureBox; 
    
    			  BoxField[i]->Cursor = System::Windows::Forms::Cursors::Hand;
                  BoxField[i]->BorderStyle = System::Windows::Forms::BorderStyle::FixedSingle; 
                  BoxField[i]->SizeMode = System::Windows::Forms::PictureBoxSizeMode::StretchImage; 
    			  BoxField[i]->Tag = i;				//erste Karte benannt 
                  BoxField[i]->Name = "Box"+i.ToString() ; 
                  BoxField[i]->Size = System::Drawing::Size( kartengroesse, kartengroesse ); 
                  BoxField[i]->TabStop = true; 
    // test eventhandler
    			  BoxField[i]->Click += gcnew System::EventHandler(this, &Form1::BoxField_Click);
    // ende test eventhandler
                  this->Controls->Add(BoxField[i]);    //in übergeordnetes Panel einfügen 
    ...
    }
    

    Gibt es hier eine kleine Aussicht auf Erfolg oder sollte ich direkt auf ein Mausevent wechseln und über
    die Position des Mauszeigers auf den Arrayindex zurückrechnen?

    Danke
    wwipfel



  • Hallo,
    ich hatte den ursprünglichen Titel nicht gut gewählt.
    Kann man bei einem Clickevent einen zusätzlichen Parameter
    z.B. den Namen des Steuerelements mit übergeben?

    Danke
    wwipfel



  • ((PictureBox)sender)->Name ...
    

    Zusätzliche Parameter übergeben geht nicht.



  • Im Tag des übergebenen Objektes könnte noch was übergeben werden.



  • witte schrieb:

    Im Tag des übergebenen Objektes könnte noch was übergeben werden.

    Hallo Witte,
    in meinem Beispiel habe ich den Tag mit dem aktuellen Array index gefüllt.
    Wie komme ich nach dem Click an den Inhalt des Tags ran?



  • obj->Tag



  • Hallo,
    für sender gibt es scheinbar keinen Tag.

    private: System::Void BoxField_Click(System::Object^  sender , System::EventArgs^  e) 
       {
          this->textBox4->Text = this->textBox4->Text+"\r\n"+sender->Tag;oString(); //gibt es nicht!
          this->textBox4->Text = this->textBox4->Text+"\r\n"+this->BoxField->ToString();// gibt System.Windows.Forms.PictureBox[] zurück ohne Index
    		 }
    

    Ich mache einen Klick auf eine Picturebox die Teil eines Arrays ist.
    Wenn ich doch BoxField[x]->Tag nutzen soll, fehlt doch das Eventauslösende [x]



  • O.o schrieb:

    ((PictureBox)sender)->Name ...
    


  • Hallo,

    private: System::Void BoxField_Click(System::Object^  sender , System::EventArgs^  e) 
    		 {
    			 this->textBox4->Text = this->textBox4->Text+"\r\n"+((PictureBox)sender)->Name;
    		 }
    

    funktioniert nicht. Der Compiler meckert wegen der konvertierung:

    'Typumwandlung': 'System::Object ^' kann nicht in 'System::Windows::Forms::PictureBox' konvertiert werden.

    @O.o Wie willst du denn ((PictureBox)sender)->Name in den Quelltext einbinden?



  • dynamic_cast<PictureBox^>(sender)->Name
    


  • Danke,
    an alle die geholfen haben!!!

    wwipfel


Anmelden zum Antworten