|
■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);
}
}
|