1

我想检测我的应用程序是否在某些情况下被最小化,如果是,则需要恢复窗口。我可以很容易地做到这一点,如下所示:

if(this.WindowState == FormWindowState.Minimized) {
    this.WindowState = FormWindowState.Normal;
}

但是,如果用户首先最大化表单,然后最小化它会发生什么?我不知道是否设置WindowStatetoFormWindowState.NormalFormWindowState.Maximized. 有没有我可以检查的方法或 API 调用来解决这个问题?

4

5 回答 5

2

下面显示的代码可以满足您的需求。顺便说一句,覆盖用户的选择是非常不明智的。

public partial class Form1 : Form {
    public Form1() {
        InitializeComponent();
        mLastState = this.WindowState;
    }
    FormWindowState mLastState;
    protected override void OnResize(EventArgs e) {
        base.OnResize(e);
        if (mLastState != this.WindowState) {
            if (this.WindowState == FormWindowState.Minimized) this.WindowState = mLastState;
            else mLastState = this.WindowState;
        }
    }
}
于 2010-01-11T18:41:46.277 回答
2

我使用此解决方案以 MDI 形式恢复表单。首先,您必须定义:

[DllImport("user32.dll")]
private static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);

private const int SW_RESTORE = 9;

以及在恢复时:

ShowWindowAsync(this.MdiChildren[i].Handle, this.SW_RESTORE);

这将在不使用其他状态持有者的情况下将表单恢复到以前的状态。你也可能会觉得这篇文章很有趣

于 2011-05-07T13:25:43.803 回答
1

我认为你应该可以打电话this.Show(),它会恢复到以前的(可见的)状态。

于 2010-01-11T18:38:27.720 回答
0

这是一种利用表单的OnResize 方法的方法

于 2010-01-11T18:42:49.957 回答
0

https://stackoverflow.com/a/6837421/578731

不确定这对每个人都有效,但我今天遇到了这个问题,团队中有人建议“你试过正常吗”?

事实证明他是对的。以下似乎很好地恢复了您的窗口:

if (myWindow.WindowState == WindowState.Minimized)
    myWindow.WindowState = WindowState.Normal;

这工作得很好,如果需要,将窗口恢复为最大化。首先检查最小化状态似乎很重要,因为第二次调用WindowState.Normal会将您的窗口“恢复”到其非最大化状态。

希望这可以帮助。

于 2012-12-10T15:39:00.817 回答