为了账号安全,请及时绑定邮箱和手机立即绑定

影响多个表单对象的函数(checkedListBox)

影响多个表单对象的函数(checkedListBox)

C#
陪伴而非守候 2022-10-15 14:14:33
我在一个表单上有多个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);    }}
查看完整描述

2 回答

?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

您可以使用该Control.Tag属性checkedListBox在每个按钮中存储正确的引用:


首先,在 中分配checkedListBox控件引用Form_Load:


btnSelectAll1.Tag = checkedListBox1;

btnSelectAll2.Tag = checkedListBox2;

...

btnSelectAll10.Tag = checkedListBox10;

然后,为所有这些按钮创建一个事件处理程序(确保将 Form.Designer.cs 文件中每个按钮的事件指向此事件处理程序):Click


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... 

}


查看完整回答
反对 回复 2022-10-15
?
炎炎设计

TA贡献1808条经验 获得超4个赞

很简单,在 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;

    }

}

这个 switch 语句对你来说可能是新的。请参阅C# 7 中的模式匹配


查看完整回答
反对 回复 2022-10-15
  • 2 回答
  • 0 关注
  • 116 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号