Forum: PC-Programmierung Button-Array Eventhandler in C++/Cli


von Marco T. (Gast)


Lesenswert?

Hallo

Ich habe im Programm-Code ein Button-Array erzeugt
1
this->Location = Point(350,10);
2
        this->Size = System::Drawing::Size(616,658);
3
        Spielfeld->Size = System::Drawing::Size(600,600);
4
        array<Windows::Forms::Button ^, 2> ^ Buttons = gcnew array<Windows::Forms::Button ^, 2>(8, 8);
5
6
        Spielfeld->Location = Point(0,23);
7
8
        for(int i = 0; i < 8; i++)
9
        {
10
          for(int j = 0; j < 8; j++)
11
          {
12
            Buttons[i,j] = gcnew Windows::Forms::Button();
13
            Buttons[i,j]->Size = System::Drawing::Size(75,75);
14
            Buttons[i,j]->FlatStyle = FlatStyle::Flat;
15
            Buttons[i,j]->Margin = System::Windows::Forms::Padding(0);
16
            Spielfeld->Controls->Add(Buttons[i,j], i, j);
17
            Spielfeld->Margin = System::Windows::Forms::Padding(0);
18
            
19
20
            if(i % 2 == 0 && j % 2 == 0 || i % 2 == 1 && j % 2 == 1)
21
              Buttons[i,j]->BackColor = Color::Black;
22
            else
23
              Buttons[i,j]->BackColor = Color::White;
24
          }
25
        }
26
        System::Windows::Forms::Control::Refresh();
Dies alles mache ich im EventHandler von Form1_Load.

Nun will ich aber auch einen Eventhandler für das Array selbst haben, 
nur hab ich leider keine Ahnung wie und wo ich das machen muss, bzw ob 
ich das Array selbst in Form1_Load bzw. wo anders definieren muss...

Jemand ne Idee wie es funktionieren könnte und wie der fertige 
Eventhandler für das Array dann aussieht?

mfg
Marco T.

von Moritz M. (Gast)


Lesenswert?

Hallo,

Füge den Buttons in deinen for-Schleiben immer den gleichen 
Event-Handler hinzu:

Buttons[i, j]->Click += gcnew EventHandler(this, 
&Form1::Buttons_Clicked);

Dann musst du noch die Funktion:
Buttons_Clicked(Object ^sender, EventArgs ^e) {}
programmieren.

In der Buttons_Clicked() Funktion kannst du dann mit:
Button ^clickedButton = dynamic_cast<Button>(sender) herrausfinden 
welcher der Buttons genau geclicked wurde.

Moritz

von Marco T. (Gast)


Lesenswert?

Danke dir, funktioniert perfekt.
Ich dachte immer ich muss nur einen Handler für das Array selbst anlegen 
^^
So kann man sich täuschen.
Vielen Dank

mfg

von Marco T. (Gast)


Lesenswert?

Ups, zu früh gefreut!

Wenn ich das mache:
1
System::Void Buttons_Clicked(Object ^sender, EventArgs ^e) {
2
3
        Button ^clickedButton = dynamic_cast<Button>(sender);
4
      }
dann kommt folgender Fehler:
 error C2680: 'System::Windows::Forms::Button': Ungültiger Zieltyp für 
dynamic_cast

von Moritz M. (Gast)


Lesenswert?

Hallo,

dann versuch mal erst den Button anzulegen mit:
Button ^clickedButton = gcnew Button();

und dann:
clickedButton = dynamic_cast<Button>(sender);

Moritz

von Marco T. (Gast)


Lesenswert?

Geht auch nicht.
Kommt immer noch der gleiche Fehler

von Marco T. (Gast)


Lesenswert?

Ok habs hinbekommen.
Man muss:
clickedButton = dynamic_cast<Button^>(sender); schreiben

mfg

von Florian W (Gast)


Lesenswert?

Kann ich die Buttons jetzt eig. nirgends anders verwenden?
Wenn ich die Im EventHandler eines anderen Buttons ansprechen will sagt 
er mir immer nicht deklarierter Bezeicher.
Selbiges auch wenn ich es im Konstruktor erstelle...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.