Извлечение неопределенного состояния из checkbox Winforms

#c# #winforms #checkbox

#c# #winforms #флажок

Вопрос:

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

Я использую этот код, чтобы установить флажок в неопределенное значение при загрузке формы :

  checkBox.CheckState = CheckState.Indeterminate;
  

это работает.

Затем, когда я нажимаю на флажок, запускается событие «CheckedChanged», и я ничего не хочу делать, если состояние не определено. Но он возвращает состояние «снято», в то время как флажок отображается как «неопределенный»..

вот как я пытаюсь получить состояние флажка :

 CheckBox c = sender as CheckBox;
  if (c.CheckState == CheckState.Indeterminate)
        {
            MessageBox.Show("Nope");
        }
  

Я не нашел решения, кроме как в WPF, но я использую Winforms..

Спасибо, что нашли время, чтобы помочь мне.

Комментарии:

1. ThreeState для свойства установлено значение true ?

2. Да, похоже, что первый щелчок по флажку с тремя состояниями, который имеет неопределенное значение, устанавливает его в false. Если вы хотите, чтобы при первом нажатии для него было установлено значение true, попробуйте использовать флажок с двумя состояниями, который по умолчанию имеет значение false.

Ответ №1:

Я добавил CheckBox элемент управления со ThreeState свойством, равным true .
В Form_Load я установил значение CheckState CheckState.Indeterminate таким же образом, как и вы.
Я подписался на CheckStateChanged событие на флажке.

Я могу получить CheckState следующим образом:

 private void CheckStateChanged(object sender, EventArgs e)
{
    var checkbox = sender as CheckBox;

    switch (checkbox.CheckState)
    {
        case CheckState.Checked:
            MessageBox.Show("Checked");
            break;
        case CheckState.Unchecked:
            MessageBox.Show("Unchecked");
            break;
        case CheckState.Indeterminate:
            MessageBox.Show("Indeterminate");
            break;
        default:
            MessageBox.Show("Nothing");
            break;
    }
}
  

Очевидно, что вместо MessageBox у вас будет свой код.

Комментарии:

1. да, я использовал CheckChanged вместо CheckStateChanged, и для свойства ThreeState не было установлено значение true. я использовал ваш код, и он сработал! Спасибо