質問

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

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

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

役に立ちましたか?

解決

以下のコードは、何が必要ありません。ユーザーの選択をオーバーライドするところで、かなり賢明ではありません。

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;
        }
    }
}

他のヒント

私は、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);

これは、追加の状態ホルダーを使用せずに以前の状態にフォームを復元します。 また、あなたはこのの記事は興味深い。

見つけることができ

私はあなたがthis.Show()を呼び出すことができるはずだと思うし、それは前の(可視)の状態に復元されます。

ここでは、フォームのてonResize方法を利用したアプローチです

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

これがすべての人に当てはまるかどうかはわかりませんが、今日私はこれに遭遇しました 誰か チームでは「やってみました 普通"?

彼は正しかったことが判明した。次のようにするとウィンドウがうまく復元されるようです。

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

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

お役に立てれば。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top