1

特定の状況でアプリケーションが最小化されているかどうかを検出したいと思います。最小化されている場合は、ウィンドウを復元する必要があります。次のように簡単に行うことができます。

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

しかし、ユーザーが最初にフォームを最大化し、次に最小化するとどうなるでしょうか? WindowStateを に設定するか、 に設定するFormWindowState.NormalかわかりませんFormWindowState.Maximized。この問題を解決するために確認できるメソッドまたは API 呼び出しはありますか?

4

5 に答える 5

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 に答える
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 に答える
1

this.Show()呼び出すことができるはずで、以前の(表示されている)状態に復元されると思います。

于 2010-01-11T18:38:27.720 に答える
0

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

これがすべての人に当てはまるかどうかはわかりませんが、今日私はこれに遭遇し、チームの誰かが「ノーマルを試しましたか?」と提案しました。

彼は正しかったことがわかりました。以下は、ウィンドウをうまく復元するようです:

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

これは問題なく機能し、必要に応じてウィンドウを最大化に戻します。WindowState.Normalをもう一度呼び出すと、ウィンドウが最大化されていない状態に「復元」されるため、最初に最小化された状態を確認することが重要です。

お役に立てれば。

于 2012-12-10T15:39:00.817 に答える
0

フォームのOnResize メソッドを利用するアプローチを次に示します。

于 2010-01-11T18:42:49.957 に答える