我创建了一个带有 2 个单选按钮的表单(名称:SubForm)。在任何单选按钮上单击另一个表单(名称:MainForm)将显示。在 SubForm.OnShow
事件中,我设置了 radiobutton1.checked:= False; radiobutton2.checked:= False;
但是子表单将在选中 radiobutton1 或 radiobutton2 的情况下显示。
知道为什么检查的属性没有设置为False
吗?
最佳答案
首先关于是否使用单选按钮组:如果多个单选按钮具有相同的父级,则该父级自动充当单选组,无论您是否使用 TRadioGroup 组件。因此,具有相同父级的单选按钮的行为就像它们应该做的那样:没有一个或只能选择一个。
其次,将一组单选按钮重置为未选择/未选中状态是完全有效的。有关最近的示例,请参阅 default radio option of edit rejection dialogue .
我重现了你的问题,但没有解释。发生的情况是,当您再次显示表单(而不是再次重新创建它)时,聚焦的控件仍然是该单选按钮。这种焦点在某种程度上阻止了更改检查状态。 有人知道为什么吗?我在 VCL 源代码中找不到它。
解决方案是使选定的单选按钮散焦。这可以通过三种方式完成,按优先顺序排列:
将焦点放在 Tab 键顺序列表中首先出现的控件(无论如何,这是一个很好的做法):
procedure TSubForm.FormShow(Sender: TObject); begin SelectFirst; RadioButton1.Checked := False; RadioButton2.Checked := False; end;
但是当单选按钮是第一个控件时,请将焦点设置到表单本身:
SetFocus; RadioButton1.Checked := False; ...
或者将焦点设置到任何其他控件(如果有意义):
OKButton.SetFocus; RadioButton1.Checked := False; ...
关于delphi - Delphi 7 中的 FormShow 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8035191/