如何防止在表单加载时检查 RadioButton?

Posted

技术标签:

【中文标题】如何防止在表单加载时检查 RadioButton?【英文标题】:How can I prevent a RadioButton from being checked when the Form loads? 【发布时间】: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) 

【问题讨论】:

添加一些单选按钮,使其不可见:) 哈哈。我宁愿控制我的代码! 【参考方案1】:

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

【讨论】:

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

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

【讨论】:

我正在尝试编辑我的内容,但它不允许我这样做。将 AutoDropAutoCheck 保持为 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 标签。这里的版主责备人们在主题中发布带有标签的问题。我认为愚蠢的 *** 规则。

以上是关于如何防止在表单加载时检查 RadioButton?的主要内容,如果未能解决你的问题,请参考以下文章

表单提交后如何防止页面重新加载 - JQuery

如何防止表单提交在字段上点击输入? [复制]

使用无显示按钮防止在 Jquery 表单提交上加载页面

如何防止表单元素在 Chrome 中预填充

如何检查是否从另一个类中检查了RadioButton?

如何检查页面重新加载是不是完成