C# 监听组框中的复选框更改

C# Listen for checkbox chenge in groupbox

我有一个包含 16 个复选框的组框,我需要 运行 一个事件,如果其中任何一个更改状态,它就会知道按下的按钮。

我知道我可以为每个添加一个点击操作,但是有没有更简洁的方法来做到这一点?

我意识到您可以重用操作并转换发送者对象:

private void InputSwitched(object sender, EventArgs e)
        {
            CheckBox chk = (CheckBox)sender;
        }

您可以使用单个事件处理程序处理组框所有复选框的选中事件,如下所示:

public Form1()
{
    InitializeComponent();
    groupBox1.Controls.OfType<CheckBox>()
        .ToList().ForEach(c => c.CheckedChanged += C_CheckedChanged);
}
private void C_CheckedChanged(object sender, EventArgs e)
{
    var c = (CheckBox)sender;
    MessageBox.Show($"{c.Name} - Checked: {c.Checked}");
}

这就是我在评论中关于动态创建控件的意思。

你可以这样做:

    private List<CheckBox> _checkBoxes = null;

    public Form1()
    {
        InitializeComponent();

        var checkbox_count = 15;

        _checkBoxes =
                Enumerable
                    .Range(0, checkbox_count)
                    .Select(x => new CheckBox()
                    {
                        Text = $"CheckBox {x}",
                    })
                    .ToList();

        foreach (var checkbox in _checkBoxes)
        {
            flowLayoutPanel1.Controls.Add(checkbox);
            checkbox.CheckedChanged += (s, e)
                    => checkbox.BackColor =
                        checkbox.Checked
                            ? Color.Red
                            : Color.Blue;
        }
    }