Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何正确使用工具提示?_C#_.net_Controls_Tooltip - Fatal编程技术网

C# 如何正确使用工具提示?

C# 如何正确使用工具提示?,c#,.net,controls,tooltip,C#,.net,Controls,Tooltip,我正在做一个创建自定义控件的练习。自定义控件是继承控件的简单标签 使用以下工具提示代码: 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 = 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);
}
刀具尖端不使用任何配置

当我将鼠标悬停在标签上时(尽管您看不到鼠标):

现在,在我离开控件并将鼠标移到第二个标签上之后:


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

我将使用
MouseEnter
事件,而不是
MouseMove
。您可以使用
计时器
,使其不会立即显示,而是在短时间后显示

例如:

// 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();      
}

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

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
覆盖


此外,我还调整了一些似乎适合我的设置。

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

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

m_toolTip.SetToolTip(this, Text);
然后,工具提示的显示和隐藏将自动完成,而无需编写任何额外代码