C# 侦听 groupbox 中的复选框更改

Posted

技术标签:

【中文标题】C# 侦听 groupbox 中的复选框更改【英文标题】:C# Listen for checkbox chenge in groupbox 【发布时间】:2022-01-16 12:54:42 【问题描述】:

我有一个包含 16 个复选框的组框,我需要运行一个事件来知道按下的按钮是否改变状态。

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

【问题讨论】:

我很想知道您最初是如何构建这些盒子的。如果您是动态创建它们,那么您可以同时附加处理程序。 @Enigmativity “我是如何构建它的”是什么意思?它们只是在编译时放置的样式复选框。 您只是使用设计器拖放组件,而不是动态创建框。 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

【参考方案3】:

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

你可以这样做:

    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;
        
    

【讨论】:

以上是关于C# 侦听 groupbox 中的复选框更改的主要内容,如果未能解决你的问题,请参考以下文章

Qt如何将复选框放置在groupbox的标题上?

如何判断事件是不是来自 C# 中的用户输入?

复选框检查事件侦听器

在列表框中选中复选框时更改文本框的颜色 c# wpf

通过列表框项目选择c#更改复选框的状态

JCheckbox 更改侦听器收到鼠标悬停事件的通知