Windows Forms ToolTip ne réapparaîtra pas après la première utilisation

J'ai une application Windows Forms C# où je voudrais utiliser un tooltip sur l'une des boîtes de texte. J'initialise l'info-bulle dans le constructeur de la classe de la Forme, et il fonctionne de la première heure. Ainsi, lorsque je survole la zone de texte avec ma souris, cela fonctionne, mais une fois que le toolTip est épuisé et qu'il disparaît, il ne réapparaît pas lorsque je déplace ma souris loin et de nouveau sur le contrôle. Je m'attends à ce qu'il revienne. Ce que je fais mal?

Voici comment j'initialise le info-bulle:

myTip = new ToolTip();
myTip.ToolTipIcon = ToolTipIcon.Info;
myTip.IsBalloon = true;
myTip.ShowAlways = true;

myTip.SetToolTip(txtMyTextBox,"My Tooltip Text");
23
demandé sur Peter Mortensen 2009-02-18 06:16:20

9 réponses

j'ai eu un problème similaire aujourd'hui. Parfois, le tooltip ne se voyait pas. J'avais un contrôle ToolTip pour tous les contrôles de ma forme.

j'ai aussi eu un événement MouseEnter sur tous les contrôles ajoutés automatiquement, donc j'ai modifié L'événement MouseEnter pour faire:

_tooltip.Active = false;
_tooltip.Active = true;

il a corrigé le bug, mais je ne sais pas pourquoi.

En outre, le bug se produisait toujours sur les machines Windows XP, mais pas sur Windows Vista.

22
répondu Kevin Doyon 2009-04-07 17:48:23

je suppose que vous serez heureux de savoir que Microsoft est au courant...depuis environ 5 ans...

  • 2/21/2005 bogue reconnu comme reproductible
  • 3/29/2005 Hum on pourrait régler le problème, mais plus tard...
  • 11/15/2005 en fait, ce n'est pas un gros bug, et ça n'arrive pas souvent, donc nous ne le réparerons pas.

Merde j'adore quand je tombe sur des bogues que Microsoft ne veut pas résoudre! Cette fois, il est appelé caisse d'angle la dernière fois il était tout simplement trop difficile à résoudre...

http://connect.microsoft.com/VisualStudio/feedback/details/115385/tooltip-stop-showing-after-autopopdelay

je vais dire à mon client que les bugs de mon programme sont juste des cas de coin et trop difficiles à résoudre...

16
répondu user276648 2010-07-06 10:10:09

j'ai eu un problème similaire aujourd'hui. VISUAL STUDIO 2010 SP1 .Net 3.5 Après AutoPopDelay-Time L'infobulle n'affiche pas les contrôles ToolTipText. Kevins solution est le seul moyen de résoudre le problème. Je encapsuler dans ma propre bulle d'aide de la classe

public class ToolTip : System.Windows.Forms.ToolTip {

  public ToolTip() : base() {
  }

  public ToolTip(System.ComponentModel.IContainer components) : base(components) {
  }

  public new void SetToolTip(System.Windows.Forms.Control ctl, string caption) {
     ctl.MouseEnter -= new System.EventHandler(toolTip_MouseEnter);
     base.SetToolTip(ctl, caption);
     if(caption != string.Empty)
     ctl.MouseEnter += new System.EventHandler(toolTip_MouseEnter);
  }

  private void toolTip_MouseEnter(object sender, EventArgs e) {
     this.Active = false;
     this.Active = true;
  }
}
8
répondu j.la 2011-03-15 08:20:09

I had this issue in VB.NET. Ce que j'ai fait était de laisser tomber un contrôle Toottip sur le formulaire, et puis sur L'événement MouseHover du contrôle cible, j'ai mis les propriétés du ToolTip. J'ai fait cela parce que j'ai utilisé un contrôle ToolTip pour cinq contrôles D'étiquettes différents. Il a travaillé beaucoup. (En fait, je voulais que le ToolTip se montre immédiatement, donc j'ai utilisé L'événement MouseEnter à la place. Je peux poster mon code exact demain quand je vais travailler.

5
répondu HardCode 2009-02-18 03:21:19

j'ai résolu ce problème en ce

if (t == null)
{
    t = new ToolTip();
}
t.IsBalloon = true;
t.ToolTipTitle = "Stop";
t.ToolTipIcon = ToolTipIcon.Error;
t.Show("", yourControlonWhichToApplyToolTip, 0);

t.Show("PDescription", yourControlonWhichToApplyToolTip, 1000);

notez que j'ai ajouté une infobulle vide.

1
répondu Humble Coder 2011-04-08 18:21:12

pour ce que ça vaut, j'ai eu ce problème sur mon système Windows XP jusqu'à ce que je remarque que si j'ai placé au moins un contrôle tooltip sur mon formulaire manuellement (à partir de la boîte à outils) je pourrais créer autant de tooltip que nécessaire dans mon code, et ils fonctionneraient tous.

si, cependant, j'essayais de créer toutes les infobulles dans le code (par exemple dans l'événement formload) les astuces ne s'afficheraient qu'une fois et ne seraient plus jamais vues. Je ne peux pas vous donner l'histoire exacte "pourquoi cela arrive", mais j'ai reproduit ce numéro plusieurs fois avec le même effet. Ça a peut-être un rapport avec la portée de l'objet, mais je ne suis pas sûr.

donc maintenant juste comme une habitude, j'inclus toujours au moins un contrôle tooltip Visual Studio et puis le reste dans mon code.

1
répondu Silverwing 2012-04-16 10:44:31

je viens d'avoir le problème sur Windows 7 donc j'ai trouvé ce thread.

dans mon cas cela n'a pas fonctionné dans tooltip_MouseEnter:

tooltip.Active = false;
tooltip.Active = true;

alors j'ai essayé ce qui suit:

this.toolTip.SetToolTip(this.txtbx1, "tooltip-text");

cela a bien fonctionné pour moi.

0
répondu Gabe 2014-08-01 07:02:58

dans mon cas, après avoir paramétré le texte du tooltip avec le SetToolTip méthode, j'ai utilisé le Show surcharge duration paramètre, c'est à dire

toolTip.Show(text, textEdit, 1000);

après que tooltip n'ait pas réapparu sur la souris en vol stationnaire, et redémarré tooltip.Active ça n'a pas marché..

une solution qui a fonctionné pour moi était d'utiliser Show surcharge sans la durée, et le cacher manuellement ensuite:

toolTip.Show(text, textEdit);
new Task(() =>
{
    Thread.Sleep(750);
    textEdit.Invoke(new Action(() => toolTip.Hide(textEdit)));
}).Start();

avec ce code j'ai le comportement désiré, i.e.

  1. le tooltip est affiché à la fois pour 750 millisec. après le texte de l'infobulle a changé
  2. L'info-bulle n'apparaissent pour l'heure spécifiée lorsque la souris est sur le contrôle
0
répondu horgh 2014-12-14 12:16:50
System.Windows.Forms.ToolTip ToolTip1 = new System.Windows.Forms.ToolTip();

private void textBox_MouseHover(object sender, EventArgs e)
{
    ToolTip1.Show("YOUR TEXT", textBox);
}

private void textBox_MouseLeave(object sender, EventArgs e)
{
    ToolTip1.Active = false;
    ToolTip1.Active = true;
}
0
répondu Tenesi 2016-07-30 09:13:40