如何在表单加载时阻止检查单选按钮?

时间:2011-07-19 17:23:53

标签: c# winforms visual-studio-2010

我似乎无法阻止我的表单检查Group Box中的单选按钮之一:

enter image description here

如设计师所示,那里没有检查单选按钮

以下是这个简单表单的所有代码。没有任何要求在此处或表单的设计者中检查单选按钮

问:有没有办法阻止在表单加载时检查任何单选按钮

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 个答案:

答案 0 :(得分:28)

确保您的radiobuttons不是第一个tabindex = 0控件。按OK按钮tabindex = 0,然后是radiobuttons。

答案 1 :(得分:14)

在设计模式下,您会发现AutoCheck属性设置为true。只需将其变为假。在运行期间手动选择它时,不会检查它。

答案 2 :(得分:2)

在属性中设置TabStop=False

答案 3 :(得分:1)

在表单加载后将选中状态设置为false。把它放在Shown事件中,看它是否有效。

答案 4 :(得分:1)

我认为这可能是VS中的一个错误。我使用的是2010 SP1,但OP并未提及他们使用的版本。

在我的某个应用中发生了同样的幻影。

将两个单选按钮的Autochecked改为False,构建了应用程序。现在未选择受影响的按钮,但现在选择了之前未受影响的其他按钮。

返回代码并在原始按钮上将autocheck转为true,然后从true切换为false并再次返回新受影响的按钮。重新跑了,应用程序很好;没有选择按钮。

当我第一次检查原始单选按钮的tabIndex时,它们被设置为tabIndex 0;我改变了,所以这也可能是混合的一部分。