我创建了一个复选框列表,其中动态添加了 8 个复选框。我的程序的想法是:当一个框被选中时,我的绘图仪上会出现一个图表,当我取消选中它时,它就会消失。
我的问题是我不知道如何管理事件来做到这一点,因为我动态添加了复选框,并且我需要 8 个不同的事件来处理 8 个不同的图表。
谢谢。
您可以为所有这些事件使用一个事件。在事件内部,您将获得触发事件的控件的名称。像这样的东西:
private void CheckBox_Click(object sender, RoutedEventArgs e)
{
CheckBox senderChk = sender as CheckBox;
switch (senderChk.Name)
{
case "checkBox1": //do something
case "checkBox2": //do something
}
}
这里的答案建议使用 .Name 属性,但对于现在可能运行良好的动态创建的复选框。
CheckBox chx;
chx.Tag = "Chart 1"; // put these tags in an enum or at least constants
chx.Click += chx_Click;
void chx_Click(object sender, RoutedEventArgs e)
{
CheckBox chx = sender as CheckBox;
if (chx != null && chx.Tag != null)
{
switch (chx.Tag)
{
case "Chart 1":
myChart1.Visibility = chx.IsChecked? Visibility.Visible: Visibility.Collapsed;
break;
case "Chart 2": //...
break;
default:
break;
}
}
}
事件处理程序的“sender”参数指示哪个控件引发了事件。
在某处,您创建了一个控件。确保在某处保留对它的引用,作为成员变量,在字典中或其他任何地方。
然后,在您的事件处理程序中,执行以下操作:
If(sender==myControl)
{
...do something...
}
Elseif (sender==myOtherControl)
{
...do something else...
}