DOBON.NET DOBON.NETプログラミング掲示板過去ログ

PictureBox上のDrawLineのToolTip表示

環境/言語:[WindowsXP, C#.net]
分類:[.NET]

現在、PictureBox上にDrawLineにて折れ線グラフ(5本)を描画しています。
描画している線上にマウスカーソルを持って行くと、その線の情報(名称,単位,値など)を
ToolTipで表示したいのですが方法が全くわかりません。
どなたかご存じの方、ご教授願います。
めぐさん、こんにちは
線の色がそれぞれ別の色ならば、BitmapクラスのGetPixelで1ドットの
色情報が取得できますので、それで判断してはいかがでしょうか?
■No7525に返信(ゆさんの記事)
早速の回答有難う御座います。

> 線の色がそれぞれ別の色ならば、BitmapクラスのGetPixelで1ドットの
> 色情報が取得できますので、それで判断してはいかがでしょうか?
PictureBoxには、GetPixelが存在しません。
これは、どの様にして取得するのでしょうか?
初心者なもので誠に申し訳ありません。
例えば、PictureBoxと同じ大きさのBitmapオブジェクトを用意し、そのBitmapオブジェクトにPictureBoxに引いたのと同じように線を描画すれば、このBitmapオブジェクトのGetPixelメソッドが使えるのではないでしょうか。
返事が遅れて申し訳御座いません。

ゆさん、管理人さん有難う御座いました。
御陰様で線の情報を個別に取得することが出来ました。

しかし、ToolTipを表示しても消えずに残ってしまいます。
マウスを移動し、線上にのみToolTipを表示させる方法をどなたか
ご教授願います。

private void Pic_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
ToolTip Tltp = new ToolTip();
Bitmap bmp = (Bitmap)((PictureBox) sender).Image;
Color PicColor = bmp.GetPixel(e.X, e.Y);

// 赤線のみToolTip表示
if(PicColor.Name.Equals("ffff0000"))
{
Tltp.AutoPopDelay = 5000;
Tltp.AutomaticDelay = 1000;
Tltp.ReshowDelay = 50;
Tltp.ShowAlways = true;
Tltp.SetToolTip(this.Pic, "座標=[" + e.X + ", " + e.Y + "]");
}

}
> しかし、ToolTipを表示しても消えずに残ってしまいます。
> マウスを移動し、線上にのみToolTipを表示させる方法をどなたか
> ご教授願います。

まず、MouseMoveイベントでToolTipのインスタンスを次々に作成するのはやめて、素直にフォームデザイナでToolTipコントロールを配置してください。

ToolTipのテキストを変更して表示する時は、SetToolTipのあと、ActiveをTrueとし、消す時は、ActiveをFalseにします。

次のページも参考にしてみてください。

DOBON.NET .NET Tips - リストビューのアイテムごとにToolTipを表示する
http://dobon.net/vb/dotnet/control/lvitemtooltip.html
返事が遅れて申し訳御座いません。

> DOBON.NET .NET Tips - リストビューのアイテムごとにToolTipを表示する
> http://dobon.net/vb/dotnet/control/lvitemtooltip.html
上記を参考にしましたが、マウスをクリックしないとToolTipを表示する事が出来ません。
クリックせずに表示は出来ないのでしょうか?

ToolTipコントロールのプロパティはデフォルトです。

private void Pic_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
Bitmap bmp = (Bitmap)((PictureBox) sender).Image;
Color TrdColor = bmp.GetPixel(e.X, e.Y);

if(toolTip1 != null)
{
// ポイントされている座標が変わった
if(!e.X.Equals(intX) || !e.Y.Equals(intY))
{
// 現在のポイント座標を記録
intX = e.X; intY = e.Y;

// アクティブを解除
if(toolTip1.Active)
toolTip1.Active = false;

// 赤線のみToolTip表示
if(TrdColor.Name.Equals("ffff0000"))
{
// ToolTipのテキストを設定しなおす
toolTip1.SetToolTip(((PictureBox) sender), "Red = [" + e.X + ", " + e.Y + "]"
// ToolTipをアクティブにする
toolTip1.Active = true;
}
}
}
}
これでうまく行くかは分かりませんが、なぜ始めにActiveをfalseにしているのかが分かりません。ToolTipを消す時だけActiveをfalseにしてみてください。
■No7636に返信(管理人さんの記事)
> これでうまく行くかは分かりませんが、なぜ始めにActiveをfalseにしているのかが分かりません。ToolTipを消す時だけActiveをfalseにしてみてください。
http://dobon.net/vb/dotnet/control/lvitemtooltip.htmlに於いて、アクティブを解除するロジックが入っていたのでそのまま使用しました。
赤線のみ表示の判断で、else句へActive = falseを移動することで解決しました。

本当に、有難う御座いました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板