Подтвердить что ты не робот

Как я могу запретить проверку RadioButton при загрузке Формы?

Похоже на вопрос Noobie, но я не могу помешать моей форме проверять одну из радиокниг в моей 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) {
4b9b3361

Ответ 1

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

Ответ 2

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

Ответ 3

Задайте TabStop=False в свойствах.

Ответ 4

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

Ответ 5

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

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

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

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

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