2015-02-12 2 views
0

В моем списке есть одно условие: Точно, один предмет должен быть проверен. Это означает, что изменение проверки предыдущего элемента должно быть отменено. Это работает. Но снятие отметки не должно быть в состоянии. Посмотрев на графический интерфейс после попытки снятия флажка, элемент все еще проверяется из-за второго условия в методе ItemCheck-Method. Невозможно снять отметку с текущей проверки, как она должна быть. Но после того, как вы оставите ItemCheck-Method, количество проверенных элементов изменится с 1 на 0 (Property CheckedItems), хотя я вижу отмеченный элемент. Что-то не хватает в моем коде:Disallow Снять отметку со всех на CheckedListBox

 private void myCLB_ItemCheck(object sender, ItemCheckEventArgs e) 
     { 
     // 1. Checking one will uncheck all other, works perfectly 
     if (e.NewValue == CheckState.Checked && myCLB.CheckedItems.Count > 0) 
     { 
      myCLB.ItemCheck -= myCLB_ItemCheck; 
      myCLB.SetItemChecked(myCLB.CheckedIndices[0], false); 
      myCLB.ItemCheck += myCLB_ItemCheck; 
     } 

     // 2. Unchecking without checking another not allowed 
     if (myCLB.CheckedItems.Count > 0 && 
      myCLB.CheckedItems[0].Equals((sender as CheckedListBox).SelectedItem)) 
     { 
      e.NewValue = CheckState.Checked; 
      return; 
     } 

     // ... do some business here, depending on the check 
     } 

Btw: Использование радиокнопки не вариант, так как есть возможная необходимость в использовании более одного проверки. В этом случае указанные ограничения будут отключены. Я пробовал также другие варианты вторых условий, которые также работали, за исключением того, что всегда CheckedItems.Count меняется от 1 до 0 после того, как оставлен ItemCheck-Method. Я не нашел метод проверки достоверности.

Любая помощь будет очень признательна.

+0

вы в коробке в arent вы с * 'Точно один элемент должен быть проверен *, что должно означать, что они не могут снять последнее и не могут проверить тот, который они действительно хотят, потому что уже один проверен. Вместо того, чтобы микроуровневать пользователя на уровне щелчка, почему бы не проверить, сколько из них проверено, когда они нажимают кнопку «Готово/ok/Submit» и сообщают им, что неправильно? – Plutonix

+0

Они могут проверять все, что захотят, и точно один раз проверяется все время. Это условие, и это то, что видит пользователь. Он может изменить чек, но не может снять флажок. Thats perfect, но _CheckedItems_ имеет счет 0, даже есть один проверенный. Поэтому я не могу узнать, что проверяется. – Sundancer

+0

подумайте об этом ... как только один элемент проверен, нет возможности проверить другой, не нарушая правило. – Plutonix

ответ

0

Как предлагает Plutonix, вам следует рассмотреть возможность проверки того, сколько из них действительно проверено, когда пользователь отправляет форму. Если у пользователя есть флажки A и B, но позже захотят отмечать флажки C и D, было бы очень естественно, что пользователь захочет снять отметки A и B, а затем проверить C и D. Ваш текущий дизайн не позволяет это.

Но, если вы действительно зажат в на этом, я бы рассмотреть вопрос о создании в Enabled свойства False при загрузке формы или флажок модифицируется. Поэтому, если какой-либо из флажков был изменен, вы проверите, проверен ли только один, и если да, заблокируйте его.

+0

дизайн не позволяет этого, потому что он не предназначен для проверки более одного. Эта часть работает отлично. Почему я должен отключить checklistbox в начале или после того, как пользователь изменил чек? Я хочу, чтобы пользователь мог использовать checklistbox вместо того, чтобы видеть его отключенным. – Sundancer

+1

Я не понимаю. Вы говорите: «Btw: использование радиолюбителей не является опцией, поскольку существует необходимость в использовании нескольких проверок», но в верхней части жирным шрифтом «Точно один элемент должен быть проверен». Что он? – Jeremy

+0

Да, в дополнение к текущей реализации я хочу добавить это поведение. В этом случае первое условие будет отключено, тогда можно проверить более одного. Так что это уже сделано без циклов или отключение элемента управления. Единственная проблема заключается в том, как я могу сказать, что управление во втором условии содержит проверочный элемент с проверенным состоянием. – Sundancer

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