J'ai fait un contrôle personnalisé et lorsque une condition est remplie, je souhaite montrer une info-bulle: Ce code fonctionne bien, sauf pour la face que l'info-bulle scintille. P> Ce contrôle personnalisé, peint toutes les informations de l'événement Onpaint code>, peut-être que cela a quelque chose à voir avec cela? Et si c'est le cas, comment puis-je empêcher l'info-bulle de scintiller? P> p>
5 Réponses :
J'imagine que votre souris bouge un peu lorsque vous pensez que c'est toujours. Je vous suggère de faire une sorte de mise en cache ici - seulement appelez _tooltip.settooltip si le planneditem a changé. P>
Cela se produira lorsque vous affichez l'info-bulle à la position du curseur de la souris. Dès que la fenêtre de pointe apparaît, Windows remarque que la souris est située dans cette fenêtre et publie un message de Mousemove. Qui fait disparaître l'info-bulle. Ce qui fait que Windows envoie un message à Mousemove à votre contrôle, exécutez votre méthode Onmousemove (). Ce qui rend l'info-bulle apparaît à nouveau. Etcetera, vous verrez l'info-bulle de scintillement rapidement. P>
Résolez ceci par l'une des méthodes suivantes: p>
Passent, j'ai essayé la suggestion 1 et trois et l'info-bulle revient toujours. Pour l'option, celui que j'ai ce code: _tooltip.show (planneditem.description, ceci, E.x + 20, E.y + 20); code>
Remarque, même si vous réglez l'info-bulle de la souris, vous pouvez cela se produire car l'info-bulle est trop proche du bord de l'écran et est "poussé" gauche ou haut sur le dessus du curseur de la souris. Faites attention aux butineuses longues affichées près du bas / droite de l'écran.
Comme il s'agit d'un contrôle personnalisé peint, je pense qu'il serait peut-être plus facile de disposer d'une variable maintenir la dernière pointe montrée, et au lieu de toujours "régler" l'info-bulle, montrez-le simplement.
Exemple simple (en utilisant simplement Un formulaire): p> Voici la classe Tiprect que j'ai créée pour simuler tout ce que votre classe PlanneDItem est la suivante: p> public class TipRect {
public Rectangle Rect;
public string Text;
public TipRect(Rectangle r, string text) {
Rect = r;
Text = text;
}
}
N'oubliez pas que la dernière position de la souris et définissez uniquement l'info-bulle lorsque la position de la souris change.
public partial class Form1 : Form
{
private int lastX;
private int lastY;
private void button1_MouseMove(object sender, MouseEventArgs e)
{
if (e.X != this.lastX || e.Y != this.lastY)
{
toolTip1.SetToolTip(button1, "test");
this.lastX = e.X;
this.lastY = e.Y;
}
}
Cela corrige l'inflexion clignotante pour moi. Merci!
Pour les visiteurs de ce fil, voici ce que j'ai fait, suivi des suggestions ci-dessus (vb.net): Il a arrêté le scintillement. P> P>
Comment ça "scintille"? Voulez-vous dire qu'il disparaît et réapparaît lorsque vous déplacez la souris? Si oui, c'est le comportement attendu.
Eh bien, lorsque je déplace la souris et que l'info-bulle apparaît, et je garde la souris encore, l'info-bulleille le scintille un peu.