Winform非模態對話框

在開發中,經常遇到需要創建一個非模態的對話框,彈出後在不關閉的情況下依舊可以查看其它窗體,關閉後資源也不會釋放,再次彈出依舊保存上次的結果,最典型的例子是將一些複雜的耗時的任務丟到後臺,通過該對話框查看任務的進度,例如360雲盤的傳輸進度功能。

訪問我的個人網站獲取更多文章


實現思路:

  • 第一步:新建一個窗體TestForm,顯示時將其顯示爲非模態

    private void newform_Click(object sender, EventArgs e)
    {
        TestForm form1=new TestForm();
        form1.show();
    }

    這一步很簡單,即創建了一個非模態對話框,但是運行時候發現,當我點擊關閉按鈕後,窗體關閉了,資源釋放了,新建一個窗體不能保存之前的內容了

  • 第二步:處理關閉按鈕,不關閉窗體

    一個方案是取消關閉按鈕,設置窗體的ControlBox屬性爲false,但是在任務欄的圖表中依舊會有關閉按鈕,用戶點擊後會造成運行錯誤;

    解決方案其實很簡單,處理窗體的關閉按鈕事件(FormClosing)即可,代碼如下:

     private void TestFrom_FormClosing(object sender, FormClosingEventArgs e)
            {
                this.Hide(); //隱藏窗體
                e.Cancel = true; //取消關閉
            } 

    同時,第一步也要調整,在程序啓動時,就已經生成了,即在主窗體中定義變量,單擊事件僅響應show方法

    TestForm form1=new TestForm();
    private void newform_Click(object sender, EventArgs e)
    {
        form1.show();
    }

    這樣就實現了form1爲非模態對話框且和程序同生命週期

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章