.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; }
バルーン表示時間と抑制解除の時間は適宜変更するとよい。