我在表单上有多个checkedlistbox。对于每个checkedlistbox,我都有一个按钮来"选择所有"项目:
private void btnSelectAll1_Click(object sender, EventArgs e)
{
for (int i = 0; i < checkedListBox1.Items.Count; i++)
{
checkedListBox1.SetItemCheckState(i, CheckState.Checked);
}
}
每个按钮具有相同的功能,仅使用checkedlistbox2、3、4等
我想简单地拥有一个替换与按钮相对应的" checkedlistbox"的函数,而不是在每个点击功能中复制代码。例如。" btnselectall1"将" checkedlistbox1"发送到该函数和" btnselectall2"发送" checkedlistbox2"等等。
类似:
private void btnSelectAll1_Click(object sender, EventArgs e)
{
SelectAll(checkedListBox1)
}
private void btnSelectAll2_Click(object sender, EventArgs e)
{
SelectAll(checkedListBox2)
}
void SelectAll(strCheckedListBox)
{
for (int i = 0; i < strCheckedListBox.Items.Count; i++)
{
strCheckedListBox.SetItemCheckState(i, CheckState.Checked);
}
}
您可以使用Control.Tag
属性存储正确的checkedListBox
参考在每个按钮中:
首先,在Form_Load
中分配checkedListBox
控制引用:
btnSelectAll1.Tag = checkedListBox1;
btnSelectAll2.Tag = checkedListBox2;
...
btnSelectAll10.Tag = checkedListBox10;
然后,创建 all> all 这些按钮的事件处理程序(请确保将每个按钮的Click
事件指向form.designer.cs文件中的每个按钮。
private void SelectAll_Click(object sender, EventArgs e)
{
var clickedButton = sender as Button;
var checkedListBoxControl = clickedButton.Tag as CheckedListBox;
// Do what you need with checkedListBoxControl...
}
简单,在winforms中的每个事件中,发件人都是提出事件的对象。
Button button1 = new Button() {...}
Button button2 = new Button() {...}
button1.OnClicked += this.OnButtonClicked;
button2.OnClicked += this.OnButtonClicked;
// both buttons will call OnButtonClicked when pressed
您也可以在" Visual Studio Designer","属性"窗口中使用带有闪电闪光灯标记的标签。只需选择您之前使用过的功能。
private void OnButtonClicked(object sender, EventArgs e)
{
Button button = (Button)sender;
// now you know which button was clicked
...
}
如果让其他物品也要称呼此处理程序,请小心
ListBox listBox = new ListBox();
listBox.OnClicked += this.OnButtonClicked;
private void OnButtonClicked(object sender, EventArgs e)
{
// sender can be either a Button or a ListBox:
switch (sender)
{
case Button button:
ProcesButtonPressed(button);
break;
case ListBox listBox:
ProcessListBoxPressed(listBox);
break;
}
}
此开关语句可能对您来说是新的。请参阅C#7中的模式匹配