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