C# 动态创建复选框并检测选中项

C# 动态创建复选框并检测选中项,c#,checkbox,C#,Checkbox,我正在创建一个动态的五个复选框,并在一个GroupBox中创建一个for循环。 现在,它们是动态创建的,所以我不知道如何将ChangeCheck方法附加到它们上 所有这些复选框都是相关的,所以我尝试做的是这样的: 动态创建5个复选框 将每个复选框添加到列表中 当列表中的特定复选框处于启用状态时,将触发一个方法 以下是我创建复选框的方式: for (int i = 0; i < 5; i++) { CheckBox chk = new CheckBox(); chk.size

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

所有这些复选框都是相关的,所以我尝试做的是这样的:

  • 动态创建5个复选框
  • 将每个复选框添加到列表中
  • 当列表中的特定复选框处于启用状态时,将触发一个方法
  • 以下是我创建复选框的方式:

    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);
    }
    
    for(int i=0;i<5;i++)
    {
    复选框chk=新复选框();
    chk.size=新尺寸(10,10);
    chk.Top=10
    左侧通道=20
    chk.Text=i.ToString();
    组框名称.控件.添加(chk);
    }
    

    现在,如何检测哪个复选框处于打开/关闭状态?

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

    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
        }
     }
    }
    
    for(int i=0;i<5;i++)
    {
    复选框chk=新复选框();
    chk.Name=“chk”+i.ToString();
    chk.size=新尺寸(10,10);
    chk.Top=10
    左侧通道=20
    chk.Text=i.ToString();
    chk.CheckedChanged+=复选框\u CheckedChanged;
    组框名称.控件.添加(chk);
    }
    私有无效复选框\u CheckedChanged(对象发送方,System.EventArgs e)
    {
    复选框chk=发送者为复选框;
    如果(chk!=null)
    {
    如果(已检查)
    {
    字符串chkName=chk.Name;
    字符串chkText=chk.Text;
    //你的代码
    }
    }
    }
    
    您可以执行以下操作:

    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:
          }
       }
    }
    
    inttop=0;
    对于(int i=0;i<5;i++)
    {
    复选框chk=新复选框();
    chk.size=新尺寸(10,10);
    chk.Top+=(5+10);//间距=5,复选框高度=10
    chk.左=20;
    chk.Text=i.ToString();
    chk.CheckedChanged+=复选框\u CheckedChanged;
    chk.Tag=i;/*您可以在此处放置任何内容。
    否则,您也可以使用Name属性。。
    
    这有助于确定当前选中了哪个复选框*/ 组框名称.控件.添加(chk); } 私有无效复选框\u CheckedChanged(对象发送方,System.EventArgs e) { 复选框cbx=(复选框)发件人; 如果(cbx!=null) { int tag=int.Parse(cbx.tag.ToString()); 开关(标签) { 案例0: //做任何事: 打破 //在这里处理其他案件: } } }
    创建事件处理程序时只需添加一个事件处理程序-
    chk.CheckedChanged+=checkboxChanged
    -checkboxChanged的
    发送方
    参数将是复选框。我想您应该在每次迭代中增加
    chk.Top
    。否则,它们将被置于彼此之上…@stuartd,谢谢,它正在工作,但我如何才能知道选中了哪个复选框?发件人对象中是否有我可以检索的内容?@裸体是的,这里的代码只是一个示例,感谢您的关注。要确定选中了哪个复选框,您可以设置标记并在
    checkbox cbx=(checkbox)sender谢谢,这是我做的方法。虽然由于某种原因,标记不能与int.Parse一起使用,所以我使用了Name。谢谢这是真的。。。标记的类型为
    object
    ,int.Parse(“string”)接受一个字符串。我缺少
    .ToString()
    。我将在我的回答中修正这一点