Delphi 如何';家长';表格?(控件不接受焦点)
我有一个子表单“frmTest”和一个主表单“TfrmMain”。我将主窗体设置为frmTest的父窗体,如下所示:Delphi 如何';家长';表格?(控件不接受焦点),delphi,delphi-xe7,Delphi,Delphi Xe7,我有一个子表单“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(Sen
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;
但frmInsertImg中的控件(编辑框、旋转编辑等)将不接受来自鼠标的焦点,但可以使用Tab键进行聚焦
我做错了什么?我建议您将子窗体的
BorderStyle
设置为bsNone
。我不确定这种方法起作用的确切原因,但它达到了预期的效果
如果需要为子窗体添加可视框架,那么最好使用子窗体所包含的显式UI
在我看来,表单并不是真正打算以这种方式使用的。你可以让事情大部分正常进行,但它并不十分健壮。将UI放入一个框架中,然后进行托管,这将导致更好的行为。我们不需要ZIP,只需要QAdd
frmTest.BorderStyle:=bsNone
中发布的QFull示例中的一个,这一切都很好。我怀疑你是否真的希望表单的非客户端chrome显示为顶级窗口。通常您会同时将Align
设置为alClient
。包括WS\u CAPTION
似乎是导致鼠标交互出错的原因。我强烈建议您放弃当前的计划,使用bsNone
。如果你需要为视觉原因提供一个框架,那么就这样做。相关的:“我不知道为什么这样做的确切原因”-我只是想问你为什么这样做:)这似乎是不相关的:)边框如何影响焦点?焦点只是当你创建一个窗体时有点不正常的事情之一。表单并不是为此而设计的。更干净的设计是使用框架。
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.