23

私は Windows Vista と C#.net 3.5 を使用していますが、友人に XP でプログラムを実行させたところ、同じ問題が発生しました。

そのため、SystemTray のアイコンを使用してバックグラウンドで実行している C# プログラムがあります。低レベルのキーボード フックがあるので、2 つのキー (この場合は Ctr + ウィンドウ) を押すと、アプリケーションのメイン フォームがプルされます。フォームは、コンボ キーを押すイベント ハンドラーで全画面表示に設定されます。

this.FormBorderStyle = FormBorderStyle.None;
this.WindowState = FormWindowState.Maximized;

したがって、基本的に機能します。CTR + Windows を押すと、フォーカスを与えたプログラムに関係なく、フォームが表示されます。ただし、タスクバーがフォームの上に表示されることがありますが、これは望ましくありません。そのキーコンボを押したときに常に全画面表示にしたい.

私は、アプリケーションが元々フォーカスを持っているものと関係があると考えています。しかし、メイン フォームをクリックしても、タスク バーがそこにとどまることがあります。だから、フォーカスが本当に問題なのだろうか。タスクバーが頑固で、私のプログラムの後ろに座りたくない場合があるようです。

どうすればこれを修正できるか、誰にもアイデアがありますか?

編集: 詳細 - Web ブラウザーをフルスクリーン モードにしたとき、またはパワーポイントをプレゼンテーション モードにしたときと同じ効果を達成しようとしています。

ウィンドウ フォームでは、ボーダー スタイルを none にしてウィンドウを最大化することでこれを行います。しかし、何らかの理由でウィンドウがタスクバーを覆わないことがあります。半分の時間です。

メイン ウィンドウが一番上にある場合、それをクリックすると他のウィンドウが後ろに隠れてしまいます。これは、タスク バーが非表示になっている場合には望ましくありません。

4

5 に答える 5

20

これを試してください(thisフォームはどこにありますか):

this.Bounds = Screen.PrimaryScreen.Bounds;
this.TopMost = true;

これにより、フォームがフルスクリーンに設定され、タスクバーが覆われます。

于 2008-09-22T23:11:44.593 に答える
2

私は非常に多くの解決策を試しましたが、そのうちのいくつかはWindows XPで機能し、すべてがWindows7では機能しませんでした。結局のところ私はそうするための簡単なメソッドを作成します。

private void GoFullscreen(bool fullscreen)
    {
        if (fullscreen)
        {
            this.WindowState = FormWindowState.Normal;
            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
            this.Bounds = Screen.PrimaryScreen.Bounds;
        }
        else
        {
            this.WindowState = FormWindowState.Maximized;
            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Sizable;
        }
    }

コードの順序は重要であり、WindwosStateとFormBorderStyleの場所を変更すると機能しません。

この方法の利点の1つは、TOPMOSTをfalseのままにして、他のフォームがメインフォームに優先するようにすることです。

それは私の問題を完全に解決しました。

于 2012-01-15T09:41:22.780 に答える
1
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.F11)
        if (FormBorderStyle == FormBorderStyle.None)
        {
            FormBorderStyle = FormBorderStyle.Sizable;
            WindowState = FormWindowState.Normal;
        }
        else
        {
            SuspendLayout();
            FormBorderStyle = FormBorderStyle.None;
            WindowState = FormWindowState.Maximized;
            ResumeLayout();
        }
}
于 2010-08-26T17:56:57.560 に答える
0

私の知る限り、タスクバーは、「タスクバーを他のウィンドウの上に保持する」設定に基づいて、ウィンドウの上または下にあります。(少なくとも、それは XP の文言です。) この設定を検出できるかどうかを確認し、必要に応じて切り替えることができると思いますか?

于 2008-09-22T23:07:48.033 に答える
0

フォームのサイズを変更して、次のように z オーダーの前面に移動してみてください。

        Rectangle screenRect = Screen.GetBounds(this);
        this.Location = screenRect.Location;
        this.Size = screenRect.Size;
        this.BringToFront();
于 2008-09-22T23:08:31.217 に答える