2016-08-23 4 views
2

Ich erstelle eine fünf Checkboxes dynamisch mit einer for-Schleife innerhalb einer GroupBox. jetzt wurden sie dynamisch erstellt, also weiß ich nicht, wie kann ich eine ChangeCheck-Methode an sie anhängen?Checkbox dynamiclly erstellen und checked

All diese Checkbox sind im Zusammenhang damit, was ich versuche, so etwas zu tun ist:

  1. erstellen 5 Kontrollkästchen dynamiclly
  2. jedes Kontrollkästchen, um eine
  3. , wenn eine bestimmte Option in der Liste Liste hinzufügen löst eine Methode aus.

das ist, wie ich die Kontrollkästchen zu erstellen:

for (int i = 0; i < 5; i++) 
{ 
    CheckBox chk = new CheckBox(); 
    chk.size = new Size(10, 10); 
    chk.Top = 10 
    chk.Left = 20 
    chk.Text = i.ToString(); 
    group_box_name.controls.Add(chk); 
} 

Nun, wie kann ich die Checkbox erkennen on/off war?

+4

nur einen Ereignishandler hinzufügen, wenn Sie sie erstellen - 'chk.CheckedChanged + = checkboxChanged;' - die 'sender' Parameter checkboxChanged wird das Kontrollkästchen sein. – stuartd

+0

Ich denke, Sie sollten 'chk.Top' jede Iteration erhöhen. Sonst werden sie übereinander gelegt ... –

+0

@stuartd danke das es klappt, aber wie kann ich staubsaugen welche checkbox überprüft wurde? Gibt es etwas im Absenderobjekt, das ich abrufen kann? – TheDaJon

Antwort

1

auch hinzufügen, könnten Sie wie folgt vorgehen:

int top = 0; 
for (int i = 0; i < 5; i++) 
{ 
    CheckBox chk = new CheckBox(); 
    chk.size = new Size(10, 10); 
    chk.Top += (5 + 10); //Spacing = 5, CheckboxHeight = 10 
    chk.Left = 20; 
    chk.Text = i.ToString(); 
    chk.CheckedChanged += CheckBox_CheckedChanged; 
    chk.Tag = i;/*You can put anything here. 
       Otherwise you could also use the Name property.. 
       It just helps to determine which checkbox was currently checked */  
    group_box_name.controls.Add(chk); 
} 

private void checkBox_CheckedChanged(object sender, System.EventArgs e) 
{ 
    CheckBox cbx = (CheckBox)sender; 
    if(cbx != null) 
    { 
     int tag = int.Parse(cbx.Tag.ToString()); 
     switch(tag) 
     { 
     case 0: 
     //Do whatever: 
     break; 

     //Handle other cases here: 
     } 
    } 
} 
+0

danke, das ist die Methode, die ich gemacht habe. Obwohl das Tag aus irgendeinem Grund nicht mit int.Parse funktioniert hat, habe ich stattdessen Name verwendet. Danke – TheDaJon

+0

das ist wahr ... Tag ist vom Typ 'Objekt' und int.Parse (" String ") nimmt eine Zeichenfolge. Ich vermisse '.ToString()'. Ich werde das in meiner Antwort beheben –

1

Geprüftes Änderungsereignis zu Ihrem dynamisch erstellten Kontrollkästchen hinzufügen. Sie können Name

for (int i = 0; i < 5; i++) 
{ 
CheckBox chk = new CheckBox(); 
chk.Name = "chk" + i.ToString(); 
chk.size = new Size(10, 10); 
chk.Top = 10 
chk.Left = 20 
chk.Text = i.ToString(); 
chk.CheckedChanged += checkBox_CheckedChanged;  
group_box_name.controls.Add(chk); 
} 



private void checkBox_CheckedChanged(object sender, System.EventArgs e) 
{ 
CheckBox chk=sender as CheckBox; 
if(chk!=null) 
{ 
    if(chk.Checked) 
    { 
      string chkName=chk.Name; 
      string chkText=chk.Text; 
      //your code 
    } 
} 
} 
Verwandte Themen