如果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