我有一个由复选框组成的用户控件。我在表单上有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