Как я могу предотвратить проверку RadioButton при загрузке формы? - PullRequest
23 голосов
/ 19 июля 2011

Я не могу помешать моей форме проверить одну из кнопок радио в моем Group Box:

enter image description here

Как показано в конструкторе, там не проверяются кнопки радио .

Ниже приведен почти весь код этой простой формы. Ничто не требует, чтобы Радиокнопки были проверены здесь или в конструкторе формы.

Q: Есть ли способ предотвратить проверку любой радиокнопки при загрузке формы?

public ValueTypeSelector() {
  InitializeComponent();
  radioButton1.Checked = false;
  radioButton2.Checked = false;
  radioButton3.Checked = false;
  radioButton4.Checked = false;
  radioButton5.Checked = false;
  radioButton6.Checked = false;
  button1.Enabled = false;
  button1.Click += clickEvent;
  button2.Click += clickEvent;
  radioButton1.Click += clickEvent;
  radioButton2.Click += clickEvent;
  radioButton3.Click += clickEvent;
  radioButton4.Click += clickEvent;
  radioButton5.Click += clickEvent;
  radioButton6.Click += clickEvent;
}

void OnShow(object sender, EventArgs e) {
  foreach (RadioButton rad in Controls) {
    if (rad.Checked) {
      Console.WriteLine("WTF?");
    }
  }
}

void clickEvent(object sender, EventArgs e) {
  RadioButton rad = sender as RadioButton;
  if (rad != null) {
    if (rad.Checked) {
      if (rad == radioButton1) {
        DataType = TableDataType.Boolean; // <= HERE IS THE PROBLEM! FIRES ON FORM LOAD
      } else if (rad == radioButton2) {
        DataType = TableDataType.Character;
      } else if (rad == radioButton3) {
        DataType = TableDataType.DateTime;
      } else if (rad == radioButton4) {
        DataType = TableDataType.Decimal;
      } else if (rad == radioButton5) {
        DataType = TableDataType.Integer;
      } else if (rad == radioButton6) {
        DataType = TableDataType.String;
      } else {
        return;
      }
      button1.Enabled = true;
    }
  } else if (sender == button1) {
    DialogResult = DialogResult.OK;
    Close();
  } else if (sender == button2) {
    DialogResult = DialogResult.Cancel;
    Close();
  }
}

ОБНОВЛЕНИЕ: Проблема в том, что radioButton1 проверяется, когда отображается форма:

      if (rad == radioButton1) {
        DataType = TableDataType.Boolean; // <= HERE IS THE PROBLEM! FIRES ON FORM LOAD
      } else if (rad == radioButton2) {

Ответы [ 5 ]

28 голосов
/ 19 июля 2011

Убедитесь, что ваши радиокнопки НЕ являются первыми элементами управления tabindex = 0.Сделайте кнопку ОК tabindex = 0, а затем радиокнопки.

14 голосов
/ 19 июля 2011

В режиме конструктора вы обнаружите, что для свойства AutoCheck установлено значение true.Просто включите его в ложь.Он не будет проверяться, пока вы не выберете его вручную во время выполнения.

2 голосов
/ 14 июня 2016

Установить TabStop=False в свойствах.

1 голос
/ 14 мая 2015

Я думаю, что это может быть ошибка в VS.Я использую 2010 SP1, но OP не упоминает, какую версию они используют.

Была ли та же фантомность в одном из моих приложений.

Изменена автоматическая проверка для двух переключателей на False, построено приложение.Затронутые кнопки теперь не были выбраны, но теперь были выбраны другие, ранее не затронутые.

Вернулся в код и включил автоматическую проверку на true на исходных кнопках, затем переключился с true на false и снова на вновь затронутые кнопки.Re побежал, и приложение было в порядке;кнопки не выбраны.

Когда я впервые проверил tabIndexes для оригинальных переключателей, им было присвоено tabIndex 0;который я изменил, так что это тоже может быть частью микса.

1 голос
/ 19 июля 2011

Установите проверенное состояние на false после загрузки формы.Поместите это в событие Shown и посмотрите, работает ли оно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...