我有一個包含 16 個復選框的 groupbox,我需要運行一個事件,如果其中任何一個更改狀態,我需要知道按下的按鈕。
我知道我可以為每個添加一個點擊操作,但有沒有更簡潔的方法來做到這一點?

uj5u.com熱心網友回復:
我意識到你可以重用動作并轉換發送者物件:
private void InputSwitched(object sender, EventArgs e)
{
CheckBox chk = (CheckBox)sender;
}
uj5u.com熱心網友回復:
您可以使用單個事件處理程式處理 groupbox 的所有復選框的選中事件,如下所示:
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}");
}
uj5u.com熱心網友回復:
這就是我在關于動態創建控制元件的評論中的意思。
你可以這樣做:
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;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/389790.html
下一篇:如何在C#中同時播放多個聲音?
