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");
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.
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...
je vais dire à mon client que les bugs de mon programme sont juste des cas de coin et trop difficiles à résoudre...
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;
}
}
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.
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.
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.
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.
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.
- le tooltip est affiché à la fois pour 750 millisec. après le texte de l'infobulle a changé
- L'info-bulle n'apparaissent pour l'heure spécifiée lorsque la souris est sur le contrôle
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;
}