在c#中,几个用户控件如何响应其中一个控件中发生的事件

本文关键字:控件 一个 事件 响应 几个 用户 何响应 | 更新日期: 2023-09-27 17:59:01

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

在c#中,几个用户控件如何响应其中一个控件中发生的事件

一个简单的方法可以对CheckBoxes的所有事件使用一个方法,并以这种方式利用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;
        }
    }
}

事件处理程序通常是表单的一个方法(或自定义容器)。您通常了解该级别的其他控件。如果您试图在自定义控件本身上执行该事件处理程序,则会出现问题,因为您将该控件与其他控件绑定在一起。

如果有某种容器控件具有执行此逻辑的事件处理程序,则设计会更好。然后,该事件处理程序将被添加到每个复选框的Click事件中。

将控件封装在单个UserControl中。当一个事件在单个CheckBox控件上激发时,为其余CheckBox控件引发一个常规切换事件。

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

我将实现订阅者/发布者模型
在Usercontrol-A(发布者)中1) 在复选框中单击引发事件,将其转发到通用事件功能

包含用户控件的页面类将订阅用户控件A的事件,并在需要时将其转发给用户控件B(订阅者)

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