delphi 如何成为窗体的“父级”?(控件不接受焦点)

qcbq4gxm  于 2023-04-11  发布在  其他
关注(0)|答案(1)|浏览(318)

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

Code as ZIP
但是frmInsertImg中的控件(编辑框,旋转编辑等)将不接受鼠标的焦点,但可以使用Tab来聚焦。
我做错了什么?
PS:当然我应该在SetFocus之前使用CanFocus。但即使这样,CanFocus也是BROKEN(或 Delphi 中不完整)。它需要是fixed

vyswwuz2

vyswwuz21#

我建议您将子窗体的BorderStyle设置为bsNone。我不确定这样做的确切原因,但它具有预期的效果。
如果您需要为子窗体添加可视框架,那么最好使用子窗体所包含的显式UI来完成。
在我看来,表单并不是真的打算以这种方式使用的。你可以让事情大部分工作,但它不是非常健壮。把UI放在一个框架中,然后托管它应该会导致更好的行为。

相关问题