如何正确使用ToolTip?

时间:2013-01-12 21:45:51

标签: c# .net controls tooltip

我正在进行一项练习来创建自定义控件。自定义控件是继承Control的简单标签。

使用以下工具提示码:

m_toolTip = new ToolTip();

protected override void OnMouseMove(MouseEventArgs e) {
    m_toolTip.SetToolTip(this, Text);
    base.OnMouseMove(e);
}

protected override void OnMouseLeave(EventArgs e) {
    m_toolTip.RemoveAll();
    base.OnMouseLeave(e);
}

工具提示没有使用任何配置。

当我将鼠标悬停在标签上时(虽然你看不到鼠标): enter image description here

现在,在我离开控件并将鼠标悬停在第二个标签上之后: enter image description here

当您将鼠标悬停在MS Label上时,工具提示会显示,然后立即消失。如何更好地复制标准MS标签显示的行为?

3 个答案:

答案 0 :(得分:0)

我会使用MouseEnter事件代替MouseMove。您可以使用Timer,以便它不会立即显示,而是在很短的时间后显示。

例如:

// Member Variables
ToolTip toolTip = new ToolTip();
string toolTipText = "Your tool tip goes here.";
Timer toolTipTimer = new Timer();

public TimeSpan ToolTipDelay
{
  get { return TimeSpan.FromMilliseconds(toolTipTimer.Interval); }
  set { toolTipTimer.Interval = (int)value.TotalMilliseconds; }
}

// Call this in your CustomControl constructor!
void InitializeToolTipTimer()
{
  this.ToolTipDelay = TimeSpan.FromSeconds(1);

  toolTipTimer.Tick += (sender, e) =>
  {
    toolTipTimer.Stop(); // Tick only once per MouseEnter
    toolTip.SetToolTip(this, toolTipText);
  };
}

void OnToolTipMouseEnter(object sender, EventArgs e)
{
  toolTipTimer.Start(); // Start the ToolTip display Timer
}

void OnToolTipMouseLeave(object sender, EventArgs e)
{
  toolTipTimer.Stop(); // Cancel any pending ToolTip display
  toolTip.RemoveAll();      
}

答案 1 :(得分:0)

我通过以下更改解决了问题:

protected override void OnMouseHover(EventArgs e) {
    var m_position = PointToClient(Control.MousePosition);
    m_toolTip.Show(Text, this, m_position.X + 10, m_position.Y, 20000);
    base.OnMouseHover(e);
}

我删除了之前的OnMouseMove覆盖。

此外,我还调整了一些似乎对我有用的设置。

答案 2 :(得分:0)

每次要显示工具提示时都不需要设置工具提示。

您应该在控件构造函数中设置它:

m_toolTip.SetToolTip(this, Text);

然后自动为您显示和隐藏工具提示,而无需编写任何额外的代码。