2008-12-09 138 views
25

是否有一種簡單的方法可以將最小化形式恢復到之前的狀態,即Normal或Maximized?我期待與單擊任務欄相同的功能(或右鍵單擊並選擇恢復)。到目前爲止,我已經擁有了這個功能,但是如果表單之前已經最大化了,那麼它仍然會作爲一個普通的窗口返回。從最小化恢復窗口狀態

if (docView.WindowState == FormWindowState.Minimized) 
    docView.WindowState = FormWindowState.Normal; 

我是否必須處理表單中的狀態更改以記住以前的狀態?

回答

31

我用下面的擴展方法:

using System.Runtime.InteropServices; 

namespace System.Windows.Forms 
{ 
    public static class Extensions 
    { 
     [DllImport("user32.dll")] 
     private static extern int ShowWindow(IntPtr hWnd, uint Msg); 

     private const uint SW_RESTORE = 0x09; 

     public static void Restore(this Form form) 
     { 
      if (form.WindowState == FormWindowState.Minimized) 
      { 
       ShowWindow(form.Handle, SW_RESTORE); 
      } 
     } 
    } 
} 

然後調用form.Restore()在我的代碼。

+0

當你點擊^箭頭(也叫更多圖標)時,其他人是否看到系統托盤中出現多個圖標?當你將鼠標懸停在額外的部件上時,它們會消失,所以它看起來像某種刷新問題。 – MacGyver 2015-11-23 20:25:04

4

你可以模擬一下這樣的任務欄按鈕:

SendMessage(docView.Handle, WM_SYSCOMMAND, SC_RESTORE, 0); 
3

對於我來說,上面的代碼不起作用。

但最後我找到了工作代碼。那就是:

CxImports.ManagedWindowPlacement placement = new CxImports.ManagedWindowPlacement(); 
CxImports.GetWindowPlacement(Convert.ToUInt32(Handle.ToInt64()), placement); 

if (placement.flags == CxImports.WPF_RESTORETOMAXIMIZED) 
    WindowState = FormWindowState.Maximized; 
else 
    WindowState = FormWindowState.Normal; 

我想,你可以通過簡單的谷歌搜索找到所有需要「進口」的功能。

11

的形式恢復到正常狀態的最簡單方法是:

if (MyForm.WindowState == FormWindowState.Minimized) 
{ 
    MyForm.WindowState = FormWindowState.Normal; 
} 
+0

如果之前的窗口狀態不是「普通」,而是「最大化」,會怎麼樣? – 2018-02-10 19:37:14

-1

上面的代碼也不太爲我工作在所有情況下

檢查標誌我也有檢查showcmd =後3,如果是的話最大限度地還原

相關問題