如果MainForm
仍处于创建过程中,则说明您尚未创建Form2
。您必须等到Form2
才能显示出来。
做到这一点的最简单的方法是简单地将Form2.Visible
属性设置为True在设计时(继发形式的默认设置为Visible=False
),并确保Form2
被设置为在项目选项自动创建(辅助表格不是默认自动创建的)。让Form2
在启动时自动显示。
但是,如果你的按钮需要做的事情来设置Form2
,那么你必须延迟按钮点击,直到Form2
创建后。我喜欢用延迟窗口消息为目的,例如:
const
WM_DELAYED_STARTUP = WM_APP + 1;
type
TMainForm = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure ButtonClick(Sender: TObject);
private
procedure WMDelayedStartup(var Message: TMessage); message WM_DELAYED_STARTUP;
end;
procedure TMainForm.FormCreate(Sender: TObject);
begin
PostMessage(Handle, WM_DELAYED_STARTUP, 0, 0);
end;
procedure TMainForm.ButtonClick(Sender: TObject);
begin
//...
Form2.Show;
//...
end;
procedure TMainForm.WMDelayedStartup(var Message: TMessage);
begin
Button1.Click;
end;
一个计时器也将正常工作:
type
TMainForm = class(TForm)
Button1: TButton;
StartupTimer: TTimer;
procedure FormCreate(Sender: TObject);
procedure ButtonClick(Sender: TObject);
procedure StartupTimerTimer(Sender: TObject);
end;
procedure TMainForm.FormCreate(Sender: TObject);
begin
StartupTimer.Enabled := True;
end;
procedure TMainForm.ButtonClick(Sender: TObject);
begin
//...
Form2.Show;
//...
end;
procedure TMainForm.StartupTimerTimer(Sender: TObject);
begin
StartupTimer.Enabled := False;
Button1.Click;
end;
或者,你可以使用的MainForm的OnShow
事件(如果您展示的MainForm只有一次,不应用程序的生命周期中隐藏):
type
TMainForm = class(TForm)
Button1: TButton;
procedure FormShow(Sender: TObject);
procedure ButtonClick(Sender: TObject);
end;
procedure TMainForm.FormShow(Sender: TObject);
begin
Button1.Click;
end;
procedure TMainForm.ButtonClick(Sender: TObject);
begin
//...
Form2.Show;
//...
end;
显示[最小,完整和可验证示例](https://stackoverflow.com/help/mcve) – William