在C#/ .NET中恢复窗口时是否会引发任何事件?
我注意到在激活窗口时会引发一个事件,但我无法找到正在恢复的窗口的相应事件,例如从最大化或最小化状态。
答案 0 :(得分:14)
如果您不喜欢使用表单的WindowState
属性,并且不想保留指示表单之前状态的标志,则可以在略低的级别上获得相同的结果。
您需要覆盖表单的窗口过程(WndProc
)并听取指示SC_RESTORE
的{{3}}。例如:
protected override void WndProc(ref Message m)
{
const int WM_SYSCOMMAND = 0x0112;
const int SC_RESTORE = 0xF120;
if (m.Msg == WM_SYSCOMMAND && (int)m.WParam == SC_RESTORE)
{
// Do whatever processing you need here, or raise an event
// ...
MessageBox.Show("Window was restored");
}
base.WndProc(ref m);
}
答案 1 :(得分:3)
您可以这样检查:
private void Form1_Resize(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Minimized)
{
...
}
else if ....
{
}
}
答案 2 :(得分:2)
非常不确定。您必须处理SizeChanged
事件并检测WindowState
是否已从Minimized
更改为Normal
或Maximized
更改为Normal
。 Source
答案 3 :(得分:1)
我知道这个问题已经很老了,但它的工作方式是这样的:
public Form1()
{
InitializeComponent();
this.SizeChanged += new EventHandler(Form1_WindowStateTrigger);
}
private void Form1_WindowStateTrigger(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Minimized)
{
MessageBox.Show("FORM1 MINIMIZED!");
}
if (this.WindowState == FormWindowState.Normal)
{
MessageBox.Show("FORM1 RESTORED!");
}
if (this.WindowState == FormWindowState.Maximized)
{
MessageBox.Show("FORM1 MAXIMIZED!");
}
}
使用SizeChanged事件,再加上WindowState的检查就可以了。
答案 4 :(得分:0)
检查:
private void Form1_Activated(Object o, EventArgs e)
{
if (this.WindowState == FormWindowState.Minimized) {
...
}
}
答案 5 :(得分:0)
Redhart的答案很好。这是相同的,但稍微简单一点:
public Form1()
{
InitializeComponent();
this.SizeChanged += Form1_SizeChanged;
}
#region Event-Handlers
void Form1_SizeChanged(object sender, EventArgs e)
{
var state = this.WindowState;
switch (state)
{
case FormWindowState.Maximized:
ClearMyView();
DisplayMyStuff();
break;
case FormWindowState.Minimized:
break;
case FormWindowState.Normal:
ClearMyView();
DisplayMyStuff();
break;
default:
break;
}
}
#endregion Event-Handlers
答案 6 :(得分:-2)
很容易添加:
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
}