2013-03-18 40 views
0

这是在使用c#的WinForms中。 有10个单选按钮,即汽车,自行车,火车,公共汽车等形式和与文本“XYZ”的标签。所有在同一组框中。 我编写了以下常用方法来隐藏单选按钮上的文本。c#中的事件处理程序仅适用于新控件

private void Hide_radio(object sender, EventArgs e) 
{ 
    RadioButton rb = sender as RadioButton; 
    if (rb != null) 
     label1.Text="";    
} 

奇怪的是,调用事件在以下方式(刚下初始化组件),只适用于少数收音机,而不是所有。当我拖动一个新的收音机时,它就可以工作。 [严格拖放滴。没有新的代码添加或删除。]

foreach (Control gb1c in groupBox1.Controls) 
{ 
    if (gb1c is RadioButton) 
    { 
     RadioButton rb = gb1c as RadioButton; 
     rb.CheckedChanged += new MouseEventHandler(Hide_radio); 
     break; 
    } 
} 

我已检查designer.cs和所有无线电的代码是相同的。因此,基本上,事件处理只处理少量和新的无线电,但不是全部。 为什么C#表现得如此幼稚......

+1

“为什么C#表现得如此幼稚” - 它只会做你告诉它做的事情。 – 2013-03-18 18:55:07

+0

你不需要一个break语句你需要的是创建一个方法来检查你需要什么,而不是首先进行Casting我会亲自检查一下,看看Control是否也是一个特定类型,你也需要做一个方法递归调用..“为什么C#表现得如此幼稚?它不是语言,它可能是'用户/编码器' – MethodMan 2013-03-18 18:55:29

回答

4

您在第一次活动订阅时正在打破foreach循环。从循环中删除“break”。

+0

啊!所以这是我的孩子然后... 删除工作。 再次感谢您的每一个快速职位。 – Ruby 2013-03-18 20:11:55

2

您使用break;退出循环,因此任何尚未分配事件处理程序的控件都将无法获取事件处理程序。这不是C#的幼稚行为,这是C#完全按照你的意思去做的。