2013-03-18 80 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#完全按照你的意思去做的。