我创建了一个表单(Name:SubForm),上面有2个radiobuttons。在任何radiobutton上单击另一个表单(名称:MainForm)将显示。在SubForm.OnShow
事件中,我设置了radiobutton1.checked:= False; radiobutton2.checked:= False;
但是SubForm将显示并检查radiobutton1或radiobutton2。
任何想法为什么检查属性未设置为False
?
答案 0 :(得分:3)
首先关于是否使用无线电组:如果多于一个单选按钮具有相同的父对象,则无论您是否使用TRadioGroup组件,该父对象都会自动充当无线电组。因此,具有相同父级的单选按钮的行为与应该执行的操作相同:无或只能选择一个。
其次,将一组单选按钮重置为未选中/未选中状态是完全有效的。有关最近的示例,请参阅default radio option of edit rejection dialogue。
我转载了你的问题,但我没有解释。当你再次显示表单(而不是再次重新创建)时会发生什么,那么焦点控件仍然是那个单选按钮。此焦点以某种方式阻止更改已检查状态。 任何人都知道为什么?我在VCL源代码中找不到它。
解决方案是使选定的单选按钮散焦。这可以通过三种方式完成,按优先顺序排列:
将首先出现在控制台顺序列表中的控件聚焦(无论如何这是一个好习惯):
procedure TSubForm.FormShow(Sender: TObject);
begin
SelectFirst;
RadioButton1.Checked := False;
RadioButton2.Checked := False;
end;
但是当单选按钮是第一个控件时,则将焦点设置为表单本身:
SetFocus;
RadioButton1.Checked := False;
...
或者将焦点设置为任何其他控件以防有意义:
OKButton.SetFocus;
RadioButton1.Checked := False;
...