【问题标题】:How can I prevent a RadioButton from being checked when the Form loads?如何防止在表单加载时检查 RadioButton?
【发布时间】:2011-10-08 17:49:15
【问题描述】:

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

如设计器中所示,此处未选中任何单选按钮。

下面是这个简单表单的所有代码。无需在此处或在表单设计器中检查单选按钮。

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

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) {

【问题讨论】:

  • 添加一些单选按钮,使其不可见:)
  • 哈哈。我宁愿控制我的代码!

标签: c# winforms visual-studio-2010


【解决方案1】:

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

【讨论】:

  • 啊哈!我知道它必须是这样简单的东西!谢谢。
  • @jp2code 或在设计器中将单选按钮的 AutoCheck 属性设置为 false,然后在构造函数中将其设置为 true。这似乎也行得通。
  • 还有更简单的解决方案。检查我的答案区域中的评论。
  • 我只想说这是一个非常愚蠢的错误。谢谢!
  • @jp2codeThis 绝对有效,但不必在设计器中完成。也可以通过编程方式完成:radioButton1.AutoCheck = false;
【解决方案2】:

在设计模式中,您会发现 AutoCheck 属性设置为 true。把它变成假的就行了。直到您在运行时手动选择它才会被检查。

【讨论】:

  • 我正在尝试编辑我的内容,但它不允许我这样做。将 AutoDrop 和 AutoCheck 保持为 true 可以满足您的要求。
  • 我想这会奏效。通过这样做,我必须在 clickEvent 处理程序的代码中明确检查 Radio Button,对吗?
  • 是的。您可以通过代码或 UI 检查单选按钮。您可以在 CheckedChanged 事件中处理更改。
  • 谢谢!我可能使用了 LarsTech 的回复作为答案,但我在这个帖子中给了你 4 个不同的赞成票。
  • 这不是问题。我很高兴能提供帮助。
【解决方案3】:

在属性中设置TabStop=False。

【讨论】:

    【解决方案4】:

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

    【讨论】:

    • 这是我试图避免的蛮力技术。 LarsTech 的原始答案是完成我需要的最快的,尽管 SaravananArumugam 的答案可能从 Coder 的角度来看更正确。
    【解决方案5】:

    我认为这实际上可能是 VS 中的一个错误。我使用的是 2010 SP1,但 OP 没有提及他们使用的是哪个版本。

    在我的一个应用程序中发生了同样的幻象。

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

    回到代码并在原始按钮上将自动检查设置为 true,然后在新受影响的按钮上从 true 切换为 false,然后再次返回。重新运行,应用程序很好;没有选择任何按钮。

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

    【讨论】:

    • 我没有提到它,但它确实有visual-studio-2010 标签。这里的版主责备人们在主题中发布带有标签的问题。我认为愚蠢的 StackOverflow 规则。
    猜你喜欢
    • 1970-01-01
    • 2020-07-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 2011-03-21
    • 2014-05-30
    • 1970-01-01
    相关资源
    最近更新 更多