У меня есть пользовательский элемент управления, который состоит из флажка. У меня есть 4 из этих пользовательских элементов управления в форме. Когда пользователь нажимает на любой из флажков в элементе управления пользователя, я хочу, чтобы другие пользовательские элементы управления не проверяли. Подобно тому, как работают радиокнопки, за исключением того, что мне нужно использовать флажки и события.Как несколько пользовательских элементов управления реагируют на событие, которое встречается в одном из них в C#?
ответ
Простой способ может быть использовать единый метод для всех событий в 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;
}
}
}
Обработчик событий обычно представляет собой метод формы (или пользовательский контейнер). Обычно вы знаете о других элементах управления на этом уровне. Если вы пытаетесь выполнить этот обработчик событий на настраиваемом элементе управления, у вас будут проблемы, потому что вы привяжете элемент управления к другим элементам управления.
Было бы лучше иметь какой-то элемент управления контейнером, у которого есть обработчик событий для выполнения этой логики. Этот обработчик событий будет добавлен к событию Click
каждого из этих флажков.
Обнаружить элементы управления в одном UserControl
. Когда событие срабатывает на одном CheckBox
, управление вызывает общее событие переключения для оставшихся CheckBox
элементов управления.
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
Почему вы должны использовать флажки вместо переключателей? –
@zespri - Вы не можете отменить выбор переключателя после его выбора (случайно). Возможно, какой-то пользователь не захочет выбрать какой-либо вариант. – Win
Обычно это разрешается добавлением 5-й радиокнопки «ни один из вышеперечисленных» –