函数以影响多个表单对象(checkedlistbox)



我在表单上有多个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中的模式匹配

最新更新