所以我想立即,因为这部分程序依赖于速度,当我的主窗体中的窗口状态发生变化时触发一个函数。我需要它是这样的:
private void goButton_Click(object sender, EventArgs e)
{
//Code
}
我检查了表单的事件选项卡,我没有 WindowStateChanged 等。我该怎么做?
表单将调整很多大小,因此无法检查大小何时更改。
所以我想立即,因为这部分程序依赖于速度,当我的主窗体中的窗口状态发生变化时触发一个函数。我需要它是这样的:
private void goButton_Click(object sender, EventArgs e)
{
//Code
}
我检查了表单的事件选项卡,我没有 WindowStateChanged 等。我该怎么做?
表单将调整很多大小,因此无法检查大小何时更改。
我希望我参加聚会不会太晚。
我选择实现它的方式非常简单,不需要分配全局变量,只需在调用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
}
底线 - 它有效。
您可以尝试按照此链接的建议覆盖该WndProc
功能。
从帖子:
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
事件并从那里检查窗口状态。但是我听说当控件(或表单?)最大化时它不会触发。
希望这可以帮助!
您可以使用它从另一个线程更改窗体的窗口状态。这适用于 .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
}
}