1

私はC#を使用して、フチなしフォームと最大化メソッドを使用してアプリケーションに「フルスクリーンモード」を提供しています。これは、フォームを最大化せずにフチなしで作成している場合に完全に機能します。画面に表示されるのはフォームだけで、タスクバーが覆われています。ただし、フォームを手動で最大化してから(ユーザー操作)、作成を試みます。ボーダレスで最大化されているため、タスクバーはフォーム上に描画されます(WorkingAreaを使用していないため、フォームのコントロールの一部が非表示になっています。タスクバーを表示しないようにするのが意図された動作です)。フォームのプロパティTopMostをtrueに設定しようとしましたが、効果がないようです。

常にタスクバーをカバーするようにこれを作り直す方法はありますか?

if (this.FormBorderStyle != System.Windows.Forms.FormBorderStyle.None)
    {        
    this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
    }
    else
    {
        this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Sizable;
    }
    if (this.WindowState != FormWindowState.Maximized)
    {
    this.WindowState = FormWindowState.Maximized;
    }
    else
    {
        if (this.FormBorderStyle == System.Windows.Forms.FormBorderStyle.Sizable)  this.WindowState=FormWindowState.Normal;
    }
4

3 に答える 3

1

ただし、フォームを手動で最大化すると(ユーザーの操作)...

問題は、ウィンドウがすでに最大化状態にあると内部的にマークされていることです。したがって、再度最大化しても、フォームの現在のサイズは変更されません。これにより、タスクバーが表示されたままになります。最初に通常に戻し、次に最大化に戻す必要があります。はい、少しちらつきます。

    private void ToggleStateButton_Click(object sender, EventArgs e) {
        if (this.FormBorderStyle == FormBorderStyle.None) {
            this.FormBorderStyle = FormBorderStyle.Sizable;
            this.WindowState = FormWindowState.Normal;
        }
        else {
            this.FormBorderStyle = FormBorderStyle.None;
            if (this.WindowState == FormWindowState.Maximized) this.WindowState = FormWindowState.Normal;
            this.WindowState = FormWindowState.Maximized;
        }
    }
于 2013-02-10T17:07:05.167 に答える
0

なぜこれが起こっているのかわかりません。画面全体を占有できると想定しているアプリは嫌いです。これは 1024x768 ディスプレイでは許容されるかもしれませんが、私の 30 インチ ディスプレイは、いまいましいものが私の画面を所有していると判断すると無駄になります。

したがって、私のメッセージは、ウィンドウを最大化することに集中するのではなく、 すべてのコントロールが表示されるようにすることに集中することです。

いつでもウィンドウ サイズの変更を検出し、既定の動作をオーバーライドして、発生している予期しない問題に対処できます。ただし、30 インチ ディスプレイ全体を最大化して使用するのではなく、必要なウィンドウの大きさを計算し、それに応じてサイズを設定します。

私の 2 セント、まさに私の考えの価値です ;)

于 2013-02-10T01:02:34.530 に答える
0

次のように、WinApi SetWindowPos メソッドを使用してみてください。

public static class WinApi
{
    [DllImport("user32.dll")]
    [return: MarshalAs(UnmanagedType.Bool)]
    static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, 
                                    int x, int y, int width, int height, 
                                    uint flags);

    static readonly IntPtr HWND_TOPMOST = new IntPtr(-1);
    const uint SWP_NOSIZE = 0x0001;
    const uint SWP_NOMOVE = 0x0002;
    const uint SWP_SHOWWINDOW = 0x0040;

    public static void SetFormTopMost(Form form)
    {
        SetWindowPos(form.Handle, HWND_TOPMOST, 0, 0, 0, 0, 
                     SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
    }
}

フォームでは、次のように呼び出します。

WinApi.SetFormTopMost(this);
于 2013-02-10T14:01:28.157 に答える