.NetのバルーンツールはToolTipだが、コントロールではないオブジェクト、例えば自作の図形に適用するには、少々細工が必要だ。
バルーンを表示するタイミングはMouseMoveイベントで自作図形の範囲にマウスが侵入する時だろう。
private void MouseMove(object sender, System.Windows.Forms.MouseEventArgs e) {
System.Drawing.Point pt = new System.Drawing.Point(e.X, e.Y);
Rectangle rect = myShape.GetExtent();
if(rect.Contains(pt)) {
toolTip.Show("こんにちは、図形!", pt, 3000); // 3秒間バルーン表示
}
}
myShapeは自作図形、GetExtentは図形の存在領域を物理単位で返す関数、toolTipは.netのToolTipコントロールだ。
これを実行してみる。
自作図形の上にマウスを置くと、バルーン「こんにちは、図形!」が表示されるが、チラつきが激しい。
美しくない。
MouseMove発生毎にtoolTip.Showが呼ばれるのがチラつきの原因だろう。
ToolTipコントロールがバルーン表示中に呼ばれるShowを無視してくれることを期待したが、甘かった。
ここは表示制御が必要のようだ。
バルーン表示直後に表示中フラグを設け、Timerイベントのハンドラでこれをクリアする。
このロジックでバルーン表示中のShow呼び出しを抑制してみよう。
bool balloonDisplay = false;
private void MouseMove(object sender, System.Windows.Forms.MouseEventArgs e) {
System.Drawing.Point pt = new System.Drawing.Point(e.X, e.Y);
Rectangle rect = myShape.GetExtent();
if(!balloonDisplay && rect.Contains(pt)) {
toolTip.Show("こんにちは、図形!", pt, 3000); // 3秒間バルーン表示
balloonDisplay = true;
Timer timer = new Timer();
timer.Tick += new EventHandler(ClearEvent);
timer.Interval = 5000; // 5秒後にバルーン表示抑制解除
timer.Start();
}
}
private void ClearEvent(object sender, EventArgs e) {
((Timer)sender).Stop();
balloonDisplay = false;
}
バルーン表示時間と抑制解除の時間は適宜変更するとよい。