我有一个子表单“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 中是不完整的)。它需要修复。 (链接是我自己网站上的一篇文章。)
我建议您将子表单的
BorderStyle
设置为 bsNone
。我不确定它起作用的确切原因,但它具有预期的效果。
如果您需要为子表单添加视觉框架,那么最好使用子表单所包含的显式 UI 来完成。
在我看来,表单并不是真的要以这种方式使用。你可以让事情大部分正常工作,但它并不是非常健壮。将 UI 放入框架中然后托管应该会带来更好的行为。