【发布时间】:2010-11-06 09:04:24
【问题描述】:
我知道我可以通过 WindowState 获取当前状态,但我想知道当用户尝试最小化表单时是否会触发任何事件。
【问题讨论】:
我知道我可以通过 WindowState 获取当前状态,但我想知道当用户尝试最小化表单时是否会触发任何事件。
【问题讨论】:
您可以使用 Resize 事件并检查事件中的 Forms.WindowState 属性。
private void Form1_Resize ( object sender , EventArgs e )
{
if ( WindowState == FormWindowState.Minimized )
{
// Do some stuff
}
}
【讨论】:
要进入之前表单已最小化,您必须挂钩到 WndProc 过程:
private const int WM_SYSCOMMAND = 0x0112;
private const int SC_MINIMIZE = 0xF020;
[SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)]
protected override void WndProc(ref Message m)
{
switch(m.Msg)
{
case WM_SYSCOMMAND:
int command = m.WParam.ToInt32() & 0xfff0;
if (command == SC_MINIMIZE)
{
// Do your action
}
// If you don't want to do the default action then break
break;
}
base.WndProc(ref m);
}
如其他答案指出的那样, 表单已最小化挂钩到 Resize 事件后做出反应(为了完整性而包含在此处):
private void Form1_Resize (object sender, EventArgs e)
{
if (WindowState == FormWindowState.Minimized)
{
// Do your action
}
}
【讨论】:
我不知道特定事件,但是当表单最小化时会触发Resize事件,您可以在该事件中检查FormWindowState.Minimized
【讨论】:
对于搜索 WPF 窗口最小化事件的人:
这有点不同。对于回调使用 WindowState :
private void Form1_Resize(object sender, EventArgs e)
{
if (WindowState == FormWindowState.Minimized)
{
// Do some stuff
}
}
要使用的事件是 StateChanged(而不是 Resize):
public Main()
{
InitializeComponent();
this.StateChanged += Form1_Resize;
}
【讨论】: