gpt4 book ai didi

delphi - Delphi 7 中的 FormShow 问题

转载 作者:行者123 更新时间:2023-12-03 15:55:11 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com