2010-01-11 24 views
1

我想檢測我的應用程序是否在某些情況下最小化,如果是,窗口需要恢復。我能做到這一點很容易如下:使用C#FormWindowState恢復?

if(this.WindowState == FormWindowState.Minimized) { 
    this.WindowState = FormWindowState.Normal; 
} 

然而,如果用戶首先最大化的形式會發生什麼,然後最小化呢?我不知道是否將WindowState設置爲FormWindowState.NormalFormWindowState.Maximized。有沒有可以檢查以解決此問題的方法或API調用?

回答

2

下面顯示的代碼可以滿足您的需求。重寫用戶的選擇是非常不明智的。

public partial class Form1 : Form { 
    public Form1() { 
     InitializeComponent(); 
     mLastState = this.WindowState; 
    } 
    FormWindowState mLastState; 
    protected override void OnResize(EventArgs e) { 
     base.OnResize(e); 
     if (mLastState != this.WindowState) { 
      if (this.WindowState == FormWindowState.Minimized) this.WindowState = mLastState; 
      else mLastState = this.WindowState; 
     } 
    } 
} 
+0

我認爲你誤解了我的問題(或者我沒有提供足夠的信息)。我並不是在壓倒用戶的選擇。這是一個包含文件關聯的單實例應用程序。當用戶打開一個文件時,我想讓現有的實例出現在前面。不過,您的代碼仍然可以解決我的問題。 – jnylen 2010-01-11 18:46:30

1

我認爲你應該可以打電話this.Show()它會恢復到以前的(可見)狀態。

+1

調用'this.Show()'不會導致窗口被恢復。會很好,雖然 – jnylen 2010-01-11 18:41:43

2

我用這個解決方案,以恢復MDI窗體形式的OnResize method的方法。首先,你必須定義:

[DllImport("user32.dll")] 
private static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow); 

private const int SW_RESTORE = 9; 

,當談到恢復:

ShowWindowAsync(this.MdiChildren[i].Handle, this.SW_RESTORE); 

這將恢復形式到以前的狀態,而無需使用額外的狀態持有人。 您也可能會發現this文章有趣

0

https://stackoverflow.com/a/6837421/578731

不知道這會爲大家工作,但我遇到了這個今天someone對球隊提出「你試過普通」 ?

原來他是對的。以下似乎很好地恢復您的窗口:

if (myWindow.WindowState == WindowState.Minimized) 
    myWindow.WindowState = WindowState.Normal; 

這很好,恢復窗口最大化,如果需要。看起來至關重要的是首先檢查最小化狀態,因爲第二次調用WindowState.Normal會將窗口「恢復」到其非最大化狀態。

希望這會有所幫助。