C#フルスクリーン時メニュー項目にチェックとバーを自動的に隠す

C# コンピュータ
C#

アプリケーションによくあるF11キーを押すとフルスクリーンとウィンドウを切り替える機能を再現したい。
フルスクリーン時はメニューバーを隠れるが、マウスカーソルが上端に近づくとメニューバーが一時的に表示される。
また、メニュー項目の「フルスクリーン」は、フルスクリーン時にチェックをつける。

スポンサーリンク

ソース

// 
// フルスクリーン
// 
using System;
using System.Windows.Forms;
using System.Drawing;

// コンパイル
// csc /t:winexe FullScreen.cs

class Form1 : Form {

    Panel panel = new Panel {
        Dock = DockStyle.Fill,
    };
    PictureBox picbox = new PictureBox {
        Dock = DockStyle.Fill,
        SizeMode = PictureBoxSizeMode.Zoom,
    };

    MenuStrip menuBar = new MenuStrip();    // メニューバー
    
    ToolStripMenuItem menuView = new ToolStripMenuItem {
        Text = "表示",
    };

    ToolStripMenuItem menuFullScreen = new ToolStripMenuItem {
        Text = "フルスクリーンF11",
    };

    // フルスクリーン項目クリックイベント
    void menuFullScreen_Click(Object o, EventArgs e) {
        var item = (ToolStripMenuItem)o;

        if (item.Checked == true) {
            // ウィンドウ
            FormBorderStyle = FormBorderStyle.Sizable;
            WindowState = FormWindowState.Normal;
            menuBar.Visible = true;
        } else {
            // フルスクリーン
            FormBorderStyle = FormBorderStyle.None;
            WindowState = FormWindowState.Maximized;
            menuBar.Visible = false;
        }

        item.Checked = !(item.Checked);
    }

    // Form1_KeyDownイベント
    void Form1_KeyDown(Object o, KeyEventArgs e) {
        switch(e.KeyCode) {
            case Keys.F11:
                menuFullScreen_Click(menuFullScreen, e);
                break;
        }
    }
    // Picbox_MouseMoveイベント
    void Picbox_MouseMove(object o, MouseEventArgs e) {
        if (menuFullScreen.Checked == false) return;

        if (e.Y == 0) {
            menuBar.Visible = true;
        } else {
            menuBar.Visible = false;
        }
    }

    // コンストラクタ
    Form1() {
        //picbox.Image = new Bitmap(@"H:\Pictures\202009291013.PNG");
        panel.Controls.Add(picbox);

        menuView.DropDownItems.Add(menuFullScreen);
        menuBar.Items.Add(menuView);

        Controls.AddRange(new Control[]{menuBar, panel});

        // イベント
        menuFullScreen.Click += menuFullScreen_Click;
        this.KeyDown += Form1_KeyDown;
        picbox.MouseMove += Picbox_MouseMove;
    }
    // エントリーポイント
    [STAThread]
    static void Main() {
        Application.Run(new Form1());
    }
}

フルスクリーン時に一時的にメニューバーを表示させる方法がこれじゃない気がするが、まぁとりあえず。

コメント