Реализация Дастина работает только с делегатами EventHandler. Если вы перейдете к CodePlex, то появится проект под названием Sharp Observation , в котором автор создал очень хорошего поставщика слабых делегатов. Он реализован в MSIL и значительно быстрее и гибче.
... что, до тех пор, пока Microsoft не осуществит слабые события изначально, придется делать.
Вы можете попробовать ToolTip.GetToolTip (control), и проверьте, не является ли возвращаемое значение пустой строкой, например:
if (!string.IsNullOrEmpty(myToolTip.GetToolTip(myControl))) { // Victory! }
I had so much trouble with the builtin tooltip that I built my own with a timer and tracking MouseMoved.
Если это единственная всплывающая подсказка, которая может быть показана, используйте решение Томми.
Если есть всплывающие подсказки вне вашего контроля, вы можете перечислить все окна всплывающих подсказок и проверить, отображается ли одно из них
a) показано
b) в пределах вашей формы / приложений
примерно так:
Native.EnumWindows ew = new Native.EnumWindows();
ew.GetWindows();
foreach (EnumWindowsItem item in ew.Items)
{
//find all windows forms tooltips currently visible
if (item.ClassName.StartsWith("WindowsForms10.tooltips_class32") && item.Visible)
{
//check if tooltip is on within form bounds
if (item.Location.X >= this.Location.X && item.Location.Y >= this.Location.Y &&
item.Location.X <= this.Location.X + this.Width &&
item.Location.Y <= this.Location.Y + this.Height)
{
//Tooltip currently shown within form bounds
}
}
}
, используя этот код для оболочки взаимодействия EnumWindows . Это что-то вроде хака, и если решение Томми вам подходит, оно намного лучше.