多个用户控件如何响应c#中其中一个事件发生的事件?

时间:2013-02-12 19:06:28

标签: c# winforms events checkbox user-controls

我有一个由复选框组成的用户控件。我在表单上有4个这样的用户控件。当用户单击用户控件中的任何一个复选框时,我希望其他用户控件确保不检查它们。类似于单选按钮的工作方式,除了我需要使用复选框和事件。

4 个答案:

答案 0 :(得分:3)

一种简单的方法可以是对CheckBox es的所有事件使用单个方法,并以这种方式利用sender对象:

List<CheckBox> listCheckBoxes;

checkBox1.CheckedChanged += new EventHandler(checkBox_CheckedChanged);
checkBox2.CheckedChanged += new EventHandler(checkBox_CheckedChanged);
checkBox3.CheckedChanged += new EventHandler(checkBox_CheckedChanged);
checkBox4.CheckedChanged += new EventHandler(checkBox_CheckedChanged);

listCheckBoxes = this.Controls.OfType<CheckBox>().ToList();

void checkBox_CheckedChanged(object sender, EventArgs e){
    CheckBox checkBox = (CheckBox)sender;
    if(checkBox.Checked){
        foreach(CheckBox c in listCheckBoxes){
            if(c.Checked && c != checkBox)
               c.Checked = false;
        }
    }
}

答案 1 :(得分:1)

事件处理程序通常是表单(或自定义容器)的方法。您通常了解该级别的其他控件。如果您尝试在自定义控件本身上执行该事件处理程序,那么您将遇到问题,因为您将控件绑定到其他控件。

拥有某种容器控件是一个更好的设计,它有一个事件处理程序来执行这个逻辑。然后,该事件处理程序将添加到每个复选框的Click事件中。

答案 2 :(得分:1)

在一个UserControl中汇总控件。当单个CheckBox控件上的事件触发时,会为剩余的CheckBox控件引发常规切换事件。

答案 3 :(得分:0)

好吧,如果我假设正确的话。你在一个表单中有4个用户控件,他们需要在某些事件上相互通信(在你的情况下,这是由你的一个用户控件中的复选框引起的事件)

我会实现订阅者/发布者模型 在Usercontrol-A(发布者)  1)在复选框上单击引发事件,将其转发到公共事件函数

包含usercontrol的页面类将订阅UsercontrolA事件,如果需要,将其转发给Usercontrol B(订阅者)

有关详细信息,请参阅此内容 http://www.codeproject.com/Articles/15550/How-to-invoke-events-across-User-Controls-in-ASP-N