5

Form.Visible を呼び出すと、フォームが最大化されているか、最小化されているか、または FormWindowState が Normal であるかに関係なく、true が返されます。

私が知りたいのは、フォームが開いているが、別のアプリケーションのウィンドウの後ろに「隠されている」かどうかを確認する方法です。

だったら前面に出して、実際にユーザーに見えるようにしたい。

BringToFront() メソッドを試しましたが、うまくいきませんでした。Show() メソッドも呼び出してみましたが、フォームが別のアプリケーションのウィンドウの背後にある場合はそのままです。

この問題に対して私が見つけた唯一の回避策は、フォームの FormWindowState を Minimized/Maximized に設定してから通常に設定することですが、これはちょっとしたハックで、見栄えがよくありません。

フォームが別のウィンドウの後ろにあるかどうかを確認する方法と、フォームを前面に表示する方法を教えてもらえますか?

4

3 に答える 3

7

変。

this.Activate()トリックを行う必要があります。

あなたはいつでも「恐ろしいハック方法」を試すことができます. ただし、this.Activate()うまくいかない場合は、テストのために次のことを試してください。

this.TopMost = true;
this.Focus();
this.BringToFront();
this.TopMost = false;

これが解決策として推奨されているのを見たことはありませんが、機能を示すには役立つかもしれません。this.Activate()上記のコードが機能する場合、なぜ機能しないのかがもっと心配です。

ウィンドウの検出に関しては、コマンドを使用して C# 経由でウィンドウを検出することはできません。詳細については、次の質問の回答を確認してください: Windows フォームでウィンドウが実際に表示されているかどうかを確認する方法は?

于 2012-07-06T17:24:09.700 に答える
2

下に配線してみると、

private void frmMyForm_Deactivate(object sender, EventArgs e)
    {
        // Raise your flag here.
    }

上記のイベントを配線することにより、フォームが最小化されたり、別のフォームによって部分的/完全に隠されたりするたびに通知されます。

于 2012-09-26T14:32:26.700 に答える
-1

ご存知のように、ウィンドウにはがある場合とない場合がありますFocus。したがって、ウィンドウにフォーカスがある場合は、ユーザーがウィンドウをクリックしたことになります。プロパティを試すことができFocusedます。そうでなければ、別のウィンドウがあなたの上にあるかどうかを教えてくれるプロパティはないと思います。
フォーカスを「与える」ことができるため、Focus()メソッドを使用してウィンドウを「ポップアウト」することができます。

注:ウィンドウは、フォーカスを合わせたり、別のウィンドウの下に置いたりすることができます。
あなたのウィンドウが別のウィンドウの下にないかどうかを判断するには、もっと深く行かなければならないのではないかと思います。

于 2012-07-06T17:19:16.530 に答える