动态创建复选框并检测已检查

时间:2016-08-23 10:47:23

标签: c# checkbox

我在GroupBox中使用for循环动态创建了一个五个复选框。 现在,它们是动态创建的,所以我不知道如何将ChangeCheck方法附加到它们上?

所有这些检查都是相关的,所以我想做的就是这样:

  1. 动态创建5个复选框
  2. 将每个复选框添加到列表中
  3. 当列表中的特定复选框启用时触发方法。
  4. 这就是我创建复选框的方式:

    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);
    }
    

    现在,我如何检测开启/关闭的复选框?

2 个答案:

答案 0 :(得分:1)

将选中的更改事件添加到动态创建的复选框中。您也可以添加名称

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
    }
 }
}

答案 1 :(得分:1)

您可以执行以下操作:

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:
      }
   }
}