C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 164 を表示中)
■94531 / )  Re[1]: Visual C# メニューバーの表示・非表示の方法
□投稿者/ KOZ (112回)-(2020/04/17(Fri) 02:07:55)
No94529 (C#初心者 さん) に返信
> 通常はメニューバーはデフォルトで非表示(VisibleをFalseとし),
> イベントハンドラ(MouseMove等)時に表示させたいです.(↓参照)

Visible を False にするとイベントも入ってこないので、
フォームを含め、他のコントロールのイベントを拾うしかありません。

イベントでは、マウス座標をいったんスクリーン座標にし、さらに
フォームの座標に変換します。

その座標が、Menu_memo の座標範囲内なら表示、でなければ非表示にします。

using System;
using System.Windows.Forms;

public partial class Form1 : Form
{
    public Form1() {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e) {
        Menu_memo.Visible = false;
        AllAddHandler(this);
    }

    void AllAddHandler(Control con) {
        con.MouseMove += All_MouseMove;
        if (con.HasChildren) {
            foreach (Control child in con.Controls) {
                AllAddHandler(child);
            }
        }
    }

    private void All_MouseMove(object sender, MouseEventArgs e) {
        var con = (Control)sender;
        var screenLocation = con.PointToScreen(e.Location);
        var formLocation = this.PointToClient(screenLocation);
        Menu_memo.Visible = Menu_memo.Bounds.Contains(formLocation);
    }
}



返信 編集キー/


管理者用

- Child Tree -