C#WinForms:如何知道/检测是否显示/显示工具提示

问题描述:

我已经创建了工具提示。该工具提示通过调用工具提示的show方法在鼠标悬停在图标上时显示。我想知道这个工具提示是否正在显示。这个怎么做?也许通过反思?C#WinForms:如何知道/检测是否显示/显示工具提示

System.Reflection.FieldInfo fi = typeof(ToolTip).GetField("window", BindingFlags.NonPublic | BindingFlags.Instance); 
fi.GetValue(someObject...) ... 

然后请求可能如果可见?

+0

可能重复[?如果检测显示工具提示(HTTP://计算器的.com /问题/ 939579 /检测-IF-工具提示被显示) –

工具提示类在其开始显示工具提示之前引发其弹出事件。您可以将此视为显示TT的时间跨度的开始。该跨度的结束是两件事中的第一件;在工具提示显示的控件上的MouseLeave事件,指示用户不再将鼠标指向任何显示ToolTip的工具提示,或工具提示的AutoPopDelay时间段过后气球将淡出。

所以,你可以在你的表单代码或其他控制包含工具提示,看起来像这样处理这个问题:的

private System.Windows.Forms.Timer ToolTipTimer = new Timer(); 

public MyControl() 
{ 
    myToolTip.Popup += ToolTipPopup; 
    ToolTipTimer.Tick += ToolTipTimerTick; 
    ToolTipTimer.Enabled = false; 
} 

private bool IsToolTipShowing { get; set; } 

private Control ToolTipControl { get; set; } 

private void ToolTipPopup(object sender, PopupEventArgs e) 
{ 
    var control = e.AssociatedControl; 

    //optionally check to see if we're interested in watching this control's ToolTip  

    ToolTipControl = control; 
    ToolTipControl.MouseLeave += ToolTipMouseLeave; 
    ToolTipAutoPopTimer.Interval = myToolTip.AutoPopDelay; 
    ToolTipTimer.Start(); 
    IsToolTipShowing = true; 
} 

//now one of these two should happen to stop the ToolTip showing on the currently-watched control 
public void ToolTipTimerTick(object sender, EventArgs e) 
{ 
    StopToolTip(); 
} 

public void ToolTipMouseLeave(object sender, EventArgs e) 
{ 
    StopTimer(); 
} 

private void StopTimer() 
{ 
    IsToolTipShowing = false; 
    ToolTipTimer.Stop(); 
    ToolTipControl.MouseLeave -= ToolTipMouseLeave; 
}