选中将方法更改为多个复选框

本文关键字:复选框 方法 | 更新日期: 2023-09-27 17:56:46

是否可以访问CheckedChanged事件来处理所有复选框,当它们被更改时?

private void AddTask(int member, String bound)
    // ...
     for (int i = 1; i <= bound; i++) {
         CheckBox checkBox = new CheckBox();
                    checkBox.Name = String.Format("c_Mem{0}_A{1}", member, i);
                    checkBox.Text = "";
                    checkBox.Width = 20;
                    checkBox.Height = 15;
                    checkBox.Location = new Point(boundX_ChkBox, boundY_ChkBox);
                    boundX_ChkBox += 26;
    //...
    }
    }          

测试了以下内容,这对我不起作用。(我只是尝试检查一个复选框,实际上应该在循环的后面)

  private void checkBox_CheckedChanged(object sender, EventArgs e)
{
    if ((CheckBox)this.Controls["c_Mem1_A1"]).Checked)
    {
        MessageBox.Show("Test"); 
    }
}

选中将方法更改为多个复选框

您只需要将事件的sender参数转换为CheckBox

private void checkBox_CheckedChanged(object sender, EventArgs e)
{
    CheckBox cb = (CheckBox) sender;
    if (cb.Checked)
    {
        MessageBox.Show("Test"); 
    }
}

但您首先需要添加相同的事件处理程序:

CheckBox checkBox = new CheckBox();
// ...
checkBox.CheckedChanged += checkBox_CheckedChanged;

在创建复选框的循环中,可以为所有复选框分配单个事件处理程序。这是可以做到的:

checkBox.CheckedChanged += checkBox_CheckedChanged;

如果这是一个 Windows 窗体应用程序,则可以Tag属性分配一个唯一的编号。然后,这可用于跟踪复选框。否则,您也可以在名称上使用switch。然后,您的处理程序将如下所示:

void checkBox_CheckedChanged(object sender, EventArgs e)
        {
            CheckBox currentCheckBox = (CheckBox)sender;
            switch ((int)currentCheckBox.Tag)
            {
                case 1:
                    // do something
                    break;
                case 2:
                    // do something else
                    break;
                default:
                    break;
            }
        }