delphi - Delphi 7 中的 FormShow 问题

标签 delphi delphi-7

我创建了一个带有 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/

相关文章:

SQL 查询因空结果而失败

delphi - 列出记录的元素\字段

windows - 控制 Delphi 2006 中新打开窗口的位置 (x,y)

delphi - 列表索引越界,添加框架delphi

Delphi 7 tguid 比较

delphi - Delphi中的字符串: Pre-allocate memory to increase performance in simple cases?

delphi - 如何实现FMX HD应用程序的放大和缩小?

delphi - 在 Delphi 7 中从字符串中去除非字母数字字符的最快方法是什么?

delphi - 鼠标缩放: marquee color

delphi - 将 _Recordset 结果与 TADOConnection.Execute 函数结合使用