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;
}
}
我有一个包含 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;
}
}