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 中的复选框更改的主要内容,如果未能解决你的问题,请参考以下文章