当窗口恢复时,是否在C#中引发了一个事件?

时间:2011-01-04 14:40:01

标签: c# winforms events forms

在C#/ .NET中恢复窗口时是否会引发任何事件?

我注意到在激活窗口时会引发一个事件,但我无法找到正在恢复的窗口的相应事件,例如从最大化或最小化状态。

7 个答案:

答案 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更改为NormalMaximized更改为NormalSource

答案 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
    }

转到此链接 winforms-windowstate-changed-how-to-detect-this?