簡體   English   中英

第一種形式不關閉,第二種不打開

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM