2015-04-21 114 views
1

当我像下面调用ToolTip.Show()时,在ToolTip.Show以某种方式设置持续时间以及设置x和y?

ToolTip.Show(Message, MyControl); 

一切正常,当MyControl失去焦点时它显示并消失。然而,ToolTip的位置在MyControl上,所以我想添加一个偏移量;

ToolTip.Show(Message,MyControl,10,-20); 

的工具提示做我想要的方式定位,它显示了悬停的时候,但不会对MyControl失去重心了消失。行为类似于将持续时间设置得非常高。

当我看着ToolTip.Show()定义时,其中一种调用方法就是这样;

public void Show(string text, IWin32Window window, int x, int y); 

那么,怎样才能工具提示突然停止时消失我只加了X & y偏移,而不是触摸持续时间?

下面的完整代码:

using System; 
using System.Drawing; 
using System.Windows.Forms; 

namespace WFA 
{ 
    public class Form1 : Form 
    { 
    public Form1() 
    { 
     UC UC = new UC(); 
     this.Controls.Add(UC); 
    } 
    } 

    public class UC : UserControl 
    { 
    String Message = "Hello!"; 
    PictureBox MyControl = new PictureBox(); 
    ToolTip ToolTip = new ToolTip(); 

    public UC() 
    { 
     MyControl.ImageLocation = "http://i.stack.imgur.com/CR5ih.png"; 
     MyControl.Location = new Point(100, 100); 
     this.Controls.Add(MyControl); 
     MyControl.MouseHover += ShowToolTip; 
    } 

    private void ShowToolTip(object sender, EventArgs e) 
    { 
     ToolTip.Show(Message, MyControl,10,-20); // this will never disappear?? 
     //ToolTip.Show(Message, MyControl); // this disappears after leaving 
    } 
    } 
} 
+0

当您调用'ToolTip.Show'时,MyControl是否由Form创建? –

+0

它在加载到外部程序状态栏的用户控件中 – Bastiaan

+0

如何将控件添加到外部程序?那是一个插件吗?或者如何?你可以发布一个简短但完整的样本来证明问题吗? –

回答

1

默认情况下,如果您未指定任何“超时”,则只有在停用父窗体时才会隐藏工具提示。

如果要在鼠标离开控件时隐藏工具提示,则必须通过调用ToolTip.Hide来手动执行此操作。

public UC() 
{ 
    BorderStyle = BorderStyle.FixedSingle; 
    MyControl.ImageLocation = "http://i.stack.imgur.com/CR5ih.png"; 
    MyControl.Location = new Point(100, 100); 
    this.Controls.Add(MyControl); 
    MyControl.MouseHover += ShowToolTip; 

    //Subscribe MouseLeave and hide the tooltip there 
    MyControl.MouseLeave += MyControl_MouseLeave; 
} 

void MyControl_MouseLeave(object sender, EventArgs e) 
{ 
    ToolTip.Hide(MyControl); 
} 
+0

嘿Sriram,但在我使用ToolTip.Show(Message,MyControl)的情况下也不要指定Timeout,但仍然可以完美工作,无需订阅MouseLeave?所以我仍然没有得到它? – Bastiaan

+0

@Bastiaan我的朋友很复杂。当你没有通过你的代码的位置,工具提示将随着你的鼠标移动。每个超载的行为都不相同。当你通过该位置时,工具提示不会跟随你的鼠标。你需要隐藏并显示它,如果你想要它遵循。有太多令人费解的事情。我每次使用工具提示时都会手动隐藏它,这正是我所建议的。 –

+0

感谢Sriram,这很有道理! – Bastiaan

1

你应该使用 ToolTip.Show(字符串文本,IWin32Window窗口,诠释的x,INT Y,INT持续时间);

+0

为什么?我不想改变持续时间,并根据定义我不需要.. – Bastiaan

+0

对不起,我错了.. :) –

相关问题