如何“父级”表单? (控件不接受焦点)

问题描述 投票:0回答:1

我有一个子表单“frmTest”和一个主表单“TfrmMain”。我将主窗体设置为 frmTest 的父窗体,如下所示:

unit Main;

INTERFACE
USES
  System.SysUtils, System.Classes, Vcl.Forms, Test, Vcl.StdCtrls, Vcl.Controls;

type
  TfrmMain = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
  public
  end;

IMPLEMENTATION  {$R *.dfm}
 
procedure TfrmMain.Button1Click(Sender: TObject);
VAR frmTest: TChildForm;
begin
  Application.CreateForm(TChildForm, frmTest);
  //frmTest:= TForm1.Create(Self);
  frmTest.Parent:= Self;
  frmTest.Show;
  frmTest.SetFocus;
end;

unit test;  { THIS IS THE CHILD }

INTERFACE

TYPE
  TChildForm = class(TForm)
    Edit1: TEdit;
    SpinEdit1: TSpinEdit;
  end;

编码为邮政编码

但是 frmInsertImg 中的控件(编辑框、旋转编辑等)不会接受鼠标焦点,但可以通过 Tab 获得焦点。

我做错了什么?


PS:当然我应该在 SetFocus 之前使用 CanFocus。但即便如此,CanFocus 仍然是BROKEN(或者在 Delphi 中是不完整的)。它需要修复。 (链接是我自己网站上的一篇文章。)

delphi delphi-xe7
1个回答
4
投票

我建议您将子表单的

BorderStyle
设置为
bsNone
。我不确定它起作用的确切原因,但它具有预期的效果。

如果您需要为子表单添加视觉框架,那么最好使用子表单所包含的显式 UI 来完成。

在我看来,表单并不是真的要以这种方式使用。你可以让事情大部分正常工作,但它并不是非常健壮。将 UI 放入框架中然后托管应该会带来更好的行为。

© www.soinside.com 2019 - 2024. All rights reserved.