Подтверждение события, запущенного из других элементов управления?

У меня есть CheckBox как часть настраиваемого элемента управления в форме. Я обрабатываю его событие Validating, чтобы установить не более 5 флажков. Если 5 уже отмечены галочкой, я отменяю мероприятие. Это прекрасно работает.

Однако теперь, когда у меня установлено 5 флажков, каждое событие отменяется (кроме снятия отметки с первого отмеченного флажка). Это означает, что нажатия кнопок, фокусировка текстового поля, выпадающий список комбо и выходы из приложения не работают. Объект-отправитель по-прежнему остается CheckBox; просто не знаю, почему это срабатывает.

Почему событие проверки флажка запускается каждый раз, когда я делаю что-нибудь? (Я бы подумал, что это сработает только тогда, когда вы щелкнете флажок). Правильно ли использовать событие «Проверка»?

Дополнительные странные вещи: при установке или снятии флажка 5-го флажка никакое событие не обрабатывается, несмотря на наличие там обработчика событий. Тот же флажок вызовет событие проверки, если это 4-й или 6-й флажок.

Мой код: в родительской форме:

    private List<MyCustomClass> GetSelectedItems()
    {
        List<MyCustomClass> result = new List<MyCustomClass>();
        foreach (MyCustomClass c in listOfControls)
        {
            if (c.Selected())
            {
                result.Add(c);
            }
        }
        return result;
    }

    private void validate(object sender, CancelEventArgs e)
    {
        if (GetSelectedItems().Count == 5)
        {
             e.Cancel = true;
        }
    }

Метод Selected класса MyCustomClass просто возвращает chkBox.Checked.


person Smashery    schedule 06.12.2010    source источник


Ответы (1)


Как вы проверяете ввод CheckBox? Это либо true, либо false. Вы сравниваете эту проверку с другими состояниями, чтобы определить, действительно ли текущее состояние проверки?

person IAbstract    schedule 06.12.2010
comment
Что вы подразумеваете под вводом CheckBox? - person Smashery; 06.12.2010
comment
Когда вы нажимаете на флажок, он получает значение _1 _... - person IAbstract; 06.12.2010
comment
Я смотрю на все существующие флажки для chkBox.Checked, и если их уже 5, а Checked = true, я устанавливаю CancelEventArgs.Cancel на false - person Smashery; 06.12.2010
comment
И под false я имею в виду true. То есть Cancel установлен в true. - person Smashery; 06.12.2010