所以我想立即,因爲這部分程序依賴於速度,當windowstate在我的主窗體中改變時觸發一個函數。我需要它是這樣的:如何在C#中WindowState更改時觸發某些內容?
private void goButton_Click(object sender, EventArgs e)
{
//Code
}
我通過窗體的事件標籤檢查,我沒有WindowStateChanged,等我該怎麼辦呢?
表單將被調整大小,因此檢查大小更改時不起作用。
所以我想立即,因爲這部分程序依賴於速度,當windowstate在我的主窗體中改變時觸發一個函數。我需要它是這樣的:如何在C#中WindowState更改時觸發某些內容?
private void goButton_Click(object sender, EventArgs e)
{
//Code
}
我通過窗體的事件標籤檢查,我沒有WindowStateChanged,等我該怎麼辦呢?
表單將被調整大小,因此檢查大小更改時不起作用。
+1看起來像給出當前API的最佳答案。 – Mufaka
非常感謝!有沒有人知道當窗口浮動到屏幕的一側時觸發事件的方法? (單擊標題並將窗口拖到屏幕的一側)更改的尺寸會確定觸發,但是有沒有一個字段或什麼可以獲取該信息? –
@NoelWidmer您可能需要使用windows API調用win7 +功能。但不知道他們會怎樣。 –
您可以使用此方法從另一個線程變換窗體的窗口狀態。這工作在.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
}
}
這對於設置WindowState屬性很有用,但我認爲問題是如何在事件發生更改後觸發事件。 – funseiki
對不起@funseiki。我有你的問題。我很快就會找到答案。 –
你可以嘗試重寫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?)最大化時它不會觸發。
希望這會有所幫助!
我希望我對派對來說不遲。
我選擇來實現它是非常簡單的,並不需要分配全局變量的方式,只需選中表格的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
}
底線 - 它的工作原理。
爲什麼表單會被調整很多,以及'if(WindowState == x)'與'響應WindowStateChanged事件(如果存在)相關的性能會怎樣? – Mufaka