Delphi7中的FormShow问题

Delphi7中的FormShow问题,delphi,delphi-7,Delphi,Delphi 7,我创建了一个表单(名称:SubForm),上面有两个单选按钮。在任一单选按钮上单击,将显示另一个表单(名称:MainForm)。在子窗体.OnShow事件中,我设置了radiobutton1.checked:=False;radiobutton2.选中:=假但子窗体将显示为选中radiobutton1或radiobutton2 是否知道为什么checked属性未设置为False?首先介绍是否使用单选组:如果多个单选按钮具有相同的父项,则无论是否使用TRadioGroup组件,该父项都会自动充当单

我创建了一个表单(名称:SubForm),上面有两个单选按钮。在任一单选按钮上单击,将显示另一个表单(名称:MainForm)。在
子窗体.OnShow
事件中,我设置了
radiobutton1.checked:=False;radiobutton2.选中:=假但子窗体将显示为选中radiobutton1或radiobutton2


是否知道为什么checked属性未设置为
False

首先介绍是否使用单选组:如果多个单选按钮具有相同的父项,则无论是否使用TRadioGroup组件,该父项都会自动充当单选组。因此,具有相同父级的单选按钮的行为与它们应该做的一样:无或只能选择一个

其次,将一组单选按钮重置为未选中/未选中状态是完全有效的。有关最近的示例,请参见

我重复了你的问题,但我没有解释。发生的情况是,当您再次显示表单(而不是再次重新创建表单)时,聚焦控件仍然是该单选按钮。此焦点以某种方式阻止更改选中状态。有人知道为什么吗?我在VCL源中找不到它

解决方法是对所选单选按钮进行离焦。这可以按优先顺序通过三种方式完成:

  • 将焦点放在选项卡顺序列表中首先出现的控件上(这是一种很好的做法):

  • 但是当单选按钮是第一个控件时,然后将焦点设置为窗体本身:

      SetFocus;
      RadioButton1.Checked := False;
      ...
    
  • 或将焦点设置为任何其他控件(如果有意义):

      OKButton.SetFocus;
      RadioButton1.Checked := False;
      ...
    

您使用的是什么版本的Delphi?Delphi 2010(我不确定以前的版本)允许您取消选中所有单选按钮。抱歉,忘了提及。。我使用的是Delphi7。默认情况下,没有选中单选按钮。然后,单选按钮以独占方式进行检查:这是单选按钮的标准行为-一次只能检查一个。所以我无法用Delphi7重现任何问题。您的代码中应该有一些内容,或者您正在猜测单选按钮的某些错误行为。尝试使用新表单创建一个新的应用程序,以便重现问题,然后在此处发布代码和确切行为,以便重现。听起来您非常希望有一个额外的单选按钮,标题为“无”,这表示其他两个选项都不可选择。单选按钮用于互斥选项。您只能选择一个选项。
  OKButton.SetFocus;
  RadioButton1.Checked := False;
  ...