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);
然后,工具提示的显示和隐藏将自动完成,而无需编写任何额外代码