[英]Closing a form and opening the second form if button is not clicked within a specified time
[英]First form not closing, second not opening
我想要一個歡迎的表格,名為StartForm。 這將關閉,然后打開我的MenuForm。
當前的問題是:第一個保持打開狀態,沒有關閉以顯示第二個。
我嘗試了幾件事,例如簡單地顯示和隱藏它們。 我現在嘗試Application.run,然后將其隱藏。 不幸的是,它保持開放。 並且Application.run不運行第二種形式。
static void Main()
{
Form StartForm = new Main();
MForm MenuForm = new MForm();
Application.Run(StartForm);
//
Task.Delay(500).ContinueWith((t) =>
{
StartForm.Hide();
Application.Run(MenuForm);
});
}
我希望在等待延遲后關閉第一個窗體,但是它保持打開狀態。
調用Application.Run()
會導致一個新的應用程序消息循環開始在當前線程上運行。 如果在第一個應用程序運行時對Application.Run()
進行了后續調用,則會根據docs引發InvalidOperationException
。 但是,在您的情況下這實際上是不可能的,因為在UI線程上正在調用Application.Run()
,這將阻止執行以下任何代碼,直到退出。
相反,我們需要使用Application.Run(new Main())
引導應用程序,然后在Main
窗體內部處理顯示和隱藏行為。
這是我建議實現此目標的方法:
首先,在您的Main
方法中,將所有內容替換為Application.Run(new Main());
。
然后在您的Main
表單內部創建一個如下所示的方法:
private void Main_Shown(Object sender, EventArgs e)
{
Task.WaitAll(Task.Delay(500));
this.Hide();
var menuForm = new MForm();
menuForm.Closed += (obj, args) => { this.Show(); };
menuForm.Show();
}
最后,進入Main.Designer.cs
文件,並確保將Shown
事件訂閱到剛在InitializeComponent
方法中創建的Main_Shown
方法,如下Shown
:
this.Shown += new System.EventHandler(this.Main_Shown);
這里發生了什么的解釋:
根據文檔 , Form.Shown
事件在第一次向用戶顯示表單時被觸發。 這對於此用例來說是完美的,因此我們“掛入”它並通過等待500毫秒的延遲來對此做出響應。
然后,我們隱藏當前的( Main
)表單,創建新的( MForm
)表單並顯示它。 但是更重要的細節是我們訂閱該表單的Closed
事件,以便當用戶關閉該事件時, Main
表單會再次顯示其自身。
使用計時器在Firstform中打開Second表單,並在顯示Secondform后隱藏Firstform。
像這樣。
主要
static void Main()
{
Form StartForm = new Main();
Application.Run(StartForm);
}
第一表格
將計時器設置為間隔5000並啟用它。
private void timer1_Tick(object sender, EventArgs e)
{
MForm MenuForm = new MForm();
this.Hide();
MenuForm.Show();
timer1.Stop();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.