如何'parent'一个表格? (控件不会接受焦点)

How to 'parent' a form? (Controls won't accept focus)

我有一个子窗体 '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

USES
  System.SysUtils,  System.Classes, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Samples.Spin;

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


IMPLEMENTATION {$R *.dfm}

end.

Code as ZIP

但 frmInsertImg 中的控件(编辑框、旋转编辑等)不接受鼠标焦点,但可以使用 Tab 键聚焦。

我做错了什么?

我建议您将子表单的 BorderStyle 设置为 bsNone。我不确定这样做的确切原因,但它具有预期的效果。

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

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