これが可能かどうかはわかりませんが、Graphics メソッド - DrawImage を使用して画像にツールチップを動的に追加しようとしています。画像がマウスオーバーされたときなどのプロパティやイベントが表示されないため、どこから始めればよいかわかりません。私はWinFormsを使用しています(C# - .NET 3.5)。アイデアや提案をいただければ幸いです。ありがとう。
14086 次
2 に答える
1
私はあなたが何らかの種類を持っていて、メソッドUserControl
を呼び出していると思います。DrawImage()
OnPaint
それを考えると、ツールチップを明示的に制御する必要があります。基本的に、Tooltip
フォームに を作成し、それをプロパティを介してコントロールに渡し、コントロールがイベントを受け取ったMouseHover
ときにツールチップを表示し、イベントを受け取ったときにツールチップを非表示にしますMouseLeave
。
このようなもの:
public partial class UserControl1 : UserControl
{
public UserControl1() {
InitializeComponent();
}
protected override void OnPaint(PaintEventArgs e) {
base.OnPaint(e);
// draw image here
}
public ToolTip ToolTip { get; set; }
protected override void OnMouseLeave(EventArgs e) {
base.OnMouseLeave(e);
if (this.ToolTip != null)
this.ToolTip.Hide(this);
}
protected override void OnMouseHover(EventArgs e) {
base.OnMouseHover(e);
if (this.ToolTip == null)
return;
Point pt = this.PointToClient(Cursor.Position);
String msg = this.CalculateMsgAt(pt);
if (String.IsNullOrEmpty(msg))
return;
pt.Y += 20;
this.ToolTip.Show(msg, this, pt);
}
private string CalculateMsgAt(Point pt) {
// Calculate the message that should be shown
// when the mouse is at thegiven point
return "This is a tooltip";
}
}
于 2010-11-28T05:48:45.803 に答える
1
描画している画像の境界を保存mouseMove event
し、その領域の位置を確認current Mouse cursor
してからツールチップを表示するか、それ以外の場合は非表示にする必要があることを忘れないでください。
ToolTip t;
private void Form1_Load(object sender, EventArgs e)
{
t = new ToolTip(); //tooltip to control on which you are drawing your Image
}
Rectangle rect; //to store the bounds of your Image
private void Panel1_Paint(object sender, PaintEventArgs e)
{
rect =new Rectangle(50,50,200,200); // setting bounds to rect to draw image
e.Graphics.DrawImage(yourImage,rect); //draw your Image
}
private void Panel1_MouseMove(object sender, MouseEventArgs e)
{
if (rect.Contains(e.Location)) //checking cursor Location if inside the rect
{
t.SetToolTip(Panel1, "Hello");//setting tooltip to Panel1
}
else
{
t.Hide(Panel1); //hiding tooltip if the cursor outside the rect
}
}
于 2010-11-28T07:43:14.697 に答える