簡體   English   中英

如何在打開至少一個模態窗口時最小化winforms應用程序

[英]How to minimize a winforms app when there is at least one modal window opened

我在Winforms應用程序中有兩個表單類(Form1和Form2)。

Form1是這樣的:

Form1上有一個按鈕

Form2是這樣的(ShowInTaskbar = false):

Form2帶有“確定”和“取消”按鈕

這個代碼在Form1上:

    Form2 someForm = new Form2();
    private void btOpenAnotherWindow_Click(object sender, EventArgs e)
    {
        if (someForm.ShowDialog(this) == DialogResult.OK)
            MessageBox.Show("OK!!!");
        else
            MessageBox.Show("Not OK.");
    }

也就是說,一個帶有按鈕的窗口,在單擊時以模態方式打開另一個窗口,並等待用戶關閉第二個窗口(通過單擊“確定”或“取消”按鈕)。 並根據它是如何關閉的,執行交替操作(此處由MessageBox.Show()調用表示)。

我需要:

  1. 用戶一次只能使用一個窗口。 (模態形式,這就是我使用ShowDialog()而不是Show()的原因)
  2. 當表單關閉時,根據表單的關閉方式做一些事情(“if(someForm.ShowDialog(this)...”)
  3. 能夠(作為用戶)最小化整個APP。
  4. 能夠正確地將應用程序“最小化”到前一狀態。
  5. 該程序響應WIN + M(最小化所有)鍵組合。

以上示例以兩種方式失敗:

  1. (需要5)不響應WIN + M
  2. (需要3)應用程序似乎在點擊最小化標題欄按鈕時最小化,但它是一種錯覺,因為主窗體(Form1)沒有最小化,實際上它只是隱藏在其他打開的窗口后面。 只運行帶有空桌面的示例才能顯示實際發生的情況。 照片如下:

單擊最小化按鈕之前:

應用程序運行的空桌面

后: 使用Form2(someForm)的空桌面最小化

注意:

  1. 主窗體未最小化
  2. Form2位於屏幕的左下角。

Form2是一個完整的窗口(本身不是一個對話框窗口),我需要用戶與它進行交互,直到它關閉,我還需要用戶能夠在需要時將整個應用程序縮小。

遺憾的是我無法在這里發布真實的形式,這將比這些模型更清晰。

我需要一個適用於多級模態窗口的解決方案(不僅如本例所示,還有兩個)。 有什么建議?

我可能需要更多關於你在這里嘗試做什么的信息。 我有一個簡單的表單(Form1),上面有一個按鈕,調用此代碼:

  private void button1_Click(object sender, EventArgs e)
  {
     Form1 form2 = new Form1();
     form2.ShowDialog();
  }

當我單擊按鈕時,我得到了相同表單的第二個實例,但它是模態的。 我仍然可以選擇最小化第二個模態形式(我顯然不能與第一個形式交互),當我最小化第二個形式時,它確實最小化了整個應用程序(兩種形式)。 現在顯然你在問這個問題,所以我不認為我理解你。 =)你希望改變這種情況怎么樣?

  • C

可能有一些方法可以使用API​​調用破解這個功能,但我可能會建議在主窗體中使用控件而不是實際窗口進行某種類型的疊加。 這將允許您使其“模態”並仍然能夠最小化/調整主窗口的大小。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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