Entwickler-Ecke

WinForms - Panel - Dynamische Crontrol


DonKannallie - Mo 11.08.14 18:30
Titel: Panel - Dynamische Crontrol
Hallo Com.

Ich bin neu im Thema Programmieren und habe da ein problem.

Ich will für ein Pc-Spiel was ich derzeitig spiele ein Programm schreiben - es soll mir helfen eine art Labyrint zu bauen nur weis ich nicht wie ich einem ddurch Array erstellten Panel eine funktion zuweisen kann bzw. allen Panels die selbe funktion.

Die Funktion soll bewirken , dass wenn ich auf ein Panel klicke soll sich die Farbe des angeklickten Panels in schwarz/weiß/rot ändern

Hier den bisjetzt geschriebenen Code:

(Vor ab , die Methode AllPanelClick ist nur teilweise von mir - den groben zusammen bau habe ich von einem Forum)


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
private void button1_Click(object sender, EventArgs e)
{
    List<Panel> panel = new List<Panel>();



    //
    // 1
    //
    for (int ebene1 = 0; ebene1 < 46; ebene1++)
    {
        panel.Add(new Panel());
        panel[ebene1].Location = new Point(10 + (ebene1 * 21), 200);
        panel[ebene1].Size = new System.Drawing.Size(2020);
        panel[ebene1].Name = "Panel" + ebene1;
        panel[ebene1].BackColor = System.Drawing.Color.Black;
        panel[ebene1].Click += AllpanelClick;
        this.Controls.Add(panel[ebene1]);
        panel[ebene1].TabIndex = ebene1;
        
    }




protected void AllpanelClick (Object sender, EventArgs e)
{
   Panel panelClicked = (Panel)sender;



   if (this.BackColor == Color.Black)
   {
       this.BackColor = Color.White;
   }
   else if (this.BackColor == Color.White)
   {
       this.BackColor = Color.Red;
   }
   else if (this.BackColor == Color.Red)
   {
       this.BackColor = Color.Black;
   }


}


Die Panels lassen sich erstellen , jedoch wenn ich dann auf ein Panel klicke passiert nichts.

Moderiert von user profile iconChristian S.: Quote- durch C#-Tags ersetzt


Christian S. - Mo 11.08.14 18:54

Hallo,

wenn ich das richtig sehe, musst Du in der Methode AllpanelClick jeweils nicht this ansprechen, sondern panelClicked. this ist dort weiterhin die Form und nicht das Panel, denn AllpanelClick ist eine Methode der Form-Klasse und nicht der Panel-Klasse.

Grüße
Christian


DonKannallie - Mo 11.08.14 18:57

WOW!

vielen dank hat geklappt !