2013-02-12 4 views
0

У меня есть пользовательский элемент управления, который состоит из флажка. У меня есть 4 из этих пользовательских элементов управления в форме. Когда пользователь нажимает на любой из флажков в элементе управления пользователя, я хочу, чтобы другие пользовательские элементы управления не проверяли. Подобно тому, как работают радиокнопки, за исключением того, что мне нужно использовать флажки и события.Как несколько пользовательских элементов управления реагируют на событие, которое встречается в одном из них в C#?

+3

Почему вы должны использовать флажки вместо переключателей? –

+0

@zespri - Вы не можете отменить выбор переключателя после его выбора (случайно). Возможно, какой-то пользователь не захочет выбрать какой-либо вариант. – Win

+0

Обычно это разрешается добавлением 5-й радиокнопки «ни один из вышеперечисленных» –

ответ

3

Простой способ может быть использовать единый метод для всех событий в CheckBox х годов и использовать 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; 
     } 
    } 
} 
1

Обработчик событий обычно представляет собой метод формы (или пользовательский контейнер). Обычно вы знаете о других элементах управления на этом уровне. Если вы пытаетесь выполнить этот обработчик событий на настраиваемом элементе управления, у вас будут проблемы, потому что вы привяжете элемент управления к другим элементам управления.

Было бы лучше иметь какой-то элемент управления контейнером, у которого есть обработчик событий для выполнения этой логики. Этот обработчик событий будет добавлен к событию Click каждого из этих флажков.

1

Обнаружить элементы управления в одном UserControl. Когда событие срабатывает на одном CheckBox, управление вызывает общее событие переключения для оставшихся CheckBox элементов управления.

0

OK , если я принимаю решение. у вас есть 4 пользовательских элемента управления в форме, и они должны общаться друг с другом на каком-либо событии (в вашем случае это событие вызвано флажком в одном из ваших пользовательских элементов управления)

Я бы реализовал модель абонента/издателя.
В UsercontrolA (издатель) 1) На Флажке Нажмите поднять событие, перешлет общую функцию события

класса

Page, который содержит UserControl, будет подписываться на случай UsercontrolA и при необходимости направить его в UserControl B (абонент)

для получения более подробной информации см это http://www.codeproject.com/Articles/15550/How-to-invoke-events-across-User-Controls-in-ASP-N