2013-03-18 4 views
0

Это в WinForms с использованием C#. Имейте форму с 10 радиокнопками viz..car, велосипед, поезд, автобус и т. Д. И ярлык с текстом «XYZ» .Все в том же групповом поле. Я написал следующий общий метод, чтобы скрыть текст при проверке переключателя.Обработчик событий в C# работает только с новыми элементами управления

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

Как ни странно, назвав это событие, как показано ниже способом (только при инициализации компонента), работает только на нескольких радиостанциях, а не все. Когда я перетаскиваю новое радио, оно работает на нем. [Строго перетащите n капли. Новый код не добавлен или удален.]

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# действует так ребячливо» - это только то, что вы говорите ему. –

+0

вам не нужен оператор break, что вам нужно, это создать метод, который проверяет, что вам нужно. Кроме того, вместо того, чтобы кастинг сначала, я лично проверил бы, будет ли элемент управления определенного типа также в методе, который вам нужно будет сделать рекурсивный вызов ..'Почему C# действует так по-детски 'это не тот язык, который является его «вероятно,« user/coder » – MethodMan

ответ

4

Вы нарушаете цикл foreach при подписке на первый случай. Удалите «разрыв» из цикла.

+0

Ahhh! Так что это был ребенок во мне тогда ... Снятие перерывов. Еще раз спасибо за быстрый пост. – Ruby

2

Ваше использование break; завершает цикл, поэтому любые элементы управления, которые еще не имеют назначенного обработчика события, не получат обработчик события. Это не C#, действующий по-детски, это C# делает именно то, что вы ему рассказываете.

Смежные вопросы