我有一个由复选框组成的用户控件。我在一个表单上有 4 个这样的用户控件。当用户单击用户控件中的任何一个复选框时,我希望其他用户控件确保它们未被选中。类似于单选按钮的工作方式,除了我需要使用复选框和事件。
4 回答
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;
}
}
}
事件处理程序通常是表单(或自定义容器)的方法。您通常了解该级别的其他控件。如果您尝试在自定义控件本身上执行该事件处理程序,您将会遇到问题,因为您会将控件绑定到其他控件。
拥有某种具有事件处理程序来执行此逻辑的容器控件将是一个更好的设计。然后将该事件处理程序添加到Click
每个复选框的事件中。
将控件封装在一个UserControl
. 当单个CheckBox
控件上的事件触发时,会为其余CheckBox
控件引发一般切换事件。
好的,如果我假设正确的话。您在一个表单中有 4 个用户控件,它们需要在某些事件上相互通信(在您的情况下,这是由您的一个用户控件中的复选框引起的事件)
我会实现订阅者/发布者模型。
在 Usercontrol-A (publisher) 1) 在复选框上单击引发一个事件,将此转发到一个公共事件函数
包含 usercontrol 的页面类将订阅 UsercontrolA 的事件,并在需要时将其转发给 Usercontrol B(订阅者)
有关更多详细信息,请参阅此 http://www.codeproject.com/Articles/15550/How-to-invoke-events-across-User-Controls-in-ASP-N