Autor Beitrag
diggn_gernot
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mo 12.12.11 04:17 
Guten Morgen.

Ich habe ein mehrdimensionales Array von Buttons erstellt und möchte die Eigenschaften einzelner Buttons per _Click Event auf den jeweiligen Button verändern. Die Buttons sind da, auch den EventHandler für das click event habe ich, aber ich bekomme es nicht hin, dass sich der geklickte Button verändert.

Hier der code:

ausblenden 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:
public void btn_erstellen_Click(object sender, EventArgs e)
        {
            int Spalten = Convert.ToInt32(numUpDown_Katzahl.Value);
            int Zeilen = Convert.ToInt32(numUpDown_qpc.Value);
            int x = 13;

          for (int n = 0; n < Spalten; n++)
            {
                for (int i = 0; i < Zeilen; i++)
                {
                    Button btn_neu = new Button();
                    btn_neu.Location = new System.Drawing.Point(x, y);
                    btn_neu.Text = "Frage " + (i + 1) + " ??";
                    btn_neu.Name = "Frage" + n + i;
                    btn_neu.TabIndex = 0;                  
                    btn_neu.Width = btn_neu_kat[11].Width;
                    this.Controls.Add(btn_neu);
                    btn_Frage[i,n] = btn_neu;
                    this.btn_Frage[i,n].Click += new System.EventHandler(this.btn_Frage_Click);
                    y = y + 40;
                }
                y = 180;
                x = x + 120;
            }
            
        }


ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
private void btn_Frage_Click(object sender, EventArgs e)
        {
            btn_Frage[1,2].BackColor = Color.Red;            
            Button btn = sender as Button;
            btn_Frage[12].Text = "lol";         
            FrageAntwort fa = new FrageAntwort();
            fa.ShowDialog(this);
        }


in Designer.cs
ausblenden C#-Quelltext
1:
System.Windows.Forms.Button[,] btn_Frage = new System.Windows.Forms.Button[30,30];					


Damit lassen sich die Eigenschaften (hier nur Beispiele) für den konkreten Button btn_Frage[1,2] ändern. Es soll aber den Button treffen, der geklickt wurde, btn_Frage[i,n], nur wie geht das? Ich denke ich muss ermitteln, welche Werte i und n gerade haben. Ich habe schon was gefunden, dass man das mit dem "sender as Button" machen kann, aber so recht will das nicht funktionieren. Hat jmd. eine Idee?

Besten Dank und gute Nacht. :)
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 12.12.11 08:52 
Hallo und :welcome:

user profile icondiggn_gernot hat folgendes geschrieben Zum zitierten Posting springen:
Ich habe schon was gefunden, dass man das mit dem "sender as Button" machen kann, aber so recht will das nicht funktionieren.
Naja, du ermittelst auf die Weise ja auch nur den Button, machst damit aber nichts. Das Array brauchst du gar nicht. Du hast den Button doch da schon in btn. Das heißt du kannst direkt mit btn arbeiten.

Für diesen Beitrag haben gedankt: diggn_gernot
diggn_gernot Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mo 12.12.11 12:48 
AAAHHHHHHHHHH


Vielen Dank!!!!

Ich bin davon ausgegegangen, das btn (Button btn = sender as Button;) nur innerhalb des click Events existiert und Veränderungen nicht an seinen sender zurück gibt, von daher habe ich das gar nicht erst versucht. OMG. Und damit habe ich mir die ganze Nacht um die Ohren geschlagen -.- :D ^^
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4796
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mo 12.12.11 13:21 
Hallo,

das Stichwort "Referenztyp" sollte dir dann für weitere Recherchen behilflich sein (denn dies sowie den Unterschied zum "Wertetyp" sollte man bei der C# Programmierung unbedingt wissen).