Delphi 7中的FormShow问题

时间:2011-11-07 10:29:40

标签: delphi delphi-7

我创建了一个表单(Name:SubForm),上面有2个radiobuttons。在任何radiobutton上单击另一个表单(名称:MainForm)将显示。在SubForm.OnShow事件中,我设置了radiobutton1.checked:= False; radiobutton2.checked:= False;但是SubForm将显示​​并检查radiobutton1或radiobutton2。

任何想法为什么检查属性未设置为False

1 个答案:

答案 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;
      ...