2009-06-02 10 views
4

J'affiche manuellement un System.Windows.Forms.Tooltip sur un contrôle en utilisant la méthode show, mais comment puis-je détecter si une info-bulle est actuellement affichée?Détecter si Tooltip est affiché?

Si j'ai besoin de changer la méthode pour le montrer à savoir, c'est bien.

+0

Si vous utilisez .Net 3.0 ou 3.5, il existe un indicateur IsOpen pour cela. Pour le framework 2.0, j'imagine que ToolTip.Active aiderait. Pas sûr cependant. – danish

+0

'IsOpen' est seulement une propriété sur les infobulles WPF, pas sur les infobulles winforms. – Xilconic

+0

La propriété ToolTip.Active est indépendante de l'affichage de l'info-bulle. Il reste cependant votre code le définit, jusqu'à ce que votre code le change. –

Répondre

9

Vous pouvez essayer ToolTip.GetToolTip (contrôle), et vérifier si la valeur retournée est pas une chaîne vide, comme ceci:

if (!string.IsNullOrEmpty(myToolTip.GetToolTip(myControl))) 
{ 
    // Victory! 
}
+1

'GetToolTip' (testé pour winforms) vérifie seulement si la méthode' SetToolTip' a été appelée pour ce 'Control'; Si c'est le cas, le texte sera renvoyé, même si l'info-bulle est affichée ou non. Pour autant que je l'ai vu, il n'y a pas de relation entre la valeur retournée de 'GetToolTip' et si' Show' a été appelée. – Xilconic

+2

Cette réponse acceptée est fausse. Cela ne vous indique pas si l'info-bulle est actuellement affichée ou non, elle obtient uniquement la valeur de texte de l'info-bulle pour le contrôle. –

1

Si c'est le seul qui peut éventuellement infobulle être affiché, utilisez Tommy Solution.

S'il y a des infobulles hors de votre contrôle, vous pouvez énumérer toutes les infobulles et vérifier si l'un d'eux est

a) montré

b) dans vos limites de forme/applications

un peu comme ceci:

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 
     } 
    } 

} 

utilisant this code pour l'emballage EnumWindows Interop. C'est un peu un hack et si la solution de Tommy fonctionne pour vous, c'est mieux mieux.

+0

Le lien pour le code de wrapper est cassé. – ThunderGr

2

J'ai eu tellement de problèmes avec l'infobulle intégrée que j'ai construit le mien avec une minuterie et suivi MouseMoved.

Questions connexes