2012-09-04 31 views
10

所以我想立即,因爲這部分程序依賴於速度,當windowstate在我的主窗體中改變時觸發一個函數。我需要它是這樣的:如何在C#中WindowState更改時觸發某些內容?

private void goButton_Click(object sender, EventArgs e) 
{ 
    //Code 
} 

我通過窗體的事件標籤檢查,我沒有WindowStateChanged,等我該怎麼辦呢?

表單將被調整大小,因此檢查大小更改時不起作用。

+0

爲什麼表單會被調整很多,以及'if(WindowState == x)'與'響應WindowStateChanged事件(如果存在)相關的性能會怎樣? – Mufaka

回答

18

當WindowState更改時,Resize事件(或SizeChanged)將觸發。


在附註中,WPF的確包含了一個StateChanged事件。

+0

+1看起來像給出當前API的最佳答案。 – Mufaka

+0

非常感謝!有沒有人知道當窗口浮動到屏幕的一側時觸發事件的方法? (單擊標題並將窗口拖到屏幕的一側)更改的尺寸會確定觸發,但是有沒有一個字段或什麼可以獲取該信息? –

+0

@NoelWidmer您可能需要使用windows API調用win7 +功能。但不知道他們會怎樣。 –

0

您可以使用此方法從另一個線程變換窗體的窗口狀態。這工作在.Net Framework 3.5

Invoke(new Action(() => { this.WindowState = FormWindowState.Normal; })); 

我希望這可能會幫助你。

public partial class Form1 : Form { 
private FormWindowState mLastState; 
public Form1() { 
    InitializeComponent(); 
    mLastState = this.WindowState; 
} 
protected override void OnClientSizeChanged(EventArgs e) { 
    if (this.WindowState != mLastState) { 
    mLastState = this.WindowState; 
    OnWindowStateChanged(e); 
    } 
    base.OnClientSizeChanged(e); 
} 
protected void OnWindowStateChanged(EventArgs e) { 
    // Do your stuff 
} 
} 
+0

這對於設置WindowState屬性很有用,但我認爲問題是如何在事件發生更改後觸發事件。 – funseiki

+0

對不起@funseiki。我有你的問題。我很快就會找到答案。 –

1

你可以嘗試重寫WndProc功能this link建議。

從帖子:

protected override void WndProc(ref Message m) 
{ 
    if (m.Msg == /*WM_SIZE*/ 0x0005) 
    { 
     if(this.WindowState == FormWindowState.Minimized) 
     { 
      // do something here 
     } 
    } 

    base.WndProc(ref m); 
} 

此代碼只檢查形式有什麼每當Resize事件。

或者,您可能只需抓取表單的Resize事件並從那裏檢查窗口狀態。但是我聽說當控件(或Form?)最大化時它不會觸發。

希望這會有所幫助!

2

我希望我對派對來說不遲。

我選擇來實現它是非常簡單的,並不需要分配全局變量的方式,只需選中表格的WindowState價值base.WndProc被稱爲前後的:

protected override void WndProc(ref Message m) 
    { 
     FormWindowState org = this.WindowState; 
     base.WndProc(ref m); 
     if (this.WindowState != org) 
      this.OnFormWindowStateChanged(EventArgs.Empty); 
    } 

    protected virtual void OnFormWindowStateChanged(EventArgs e) 
    { 
     // Do your stuff 
    } 

底線 - 它的工作原理。

相關問題