Comment formater l'infobulle utilisée par un DataGridView en mode virtuel?
-
20-08-2019 - |
Question
Je dois appliquer un formatage - en particulier un texte en gras - à l'info-bulle utilisée par un DataGridView en mode virtuel. Je peux définir le texte dans l'événement CellToolTipTextNeeded, mais il ne prend pas en charge les balises HTML. Y a-t-il une autre syntaxe que je devrais utiliser? Je ne veux pas avoir à réimplémenter l'info-bulle d'aide moi-même.
La solution
Vous pouvez utiliser le HtmlToolTip à partir de http://www.codeproject.com/KB/GDI-plus/HtmlRenderer. aspx
To use it with DataGridView create a ToolTip (HtmlToolTip) and add this after the InitalizeComponent() in your form to replace the default tooltip:
System.Reflection.FieldInfo toolTipControlFieldInfo=
typeof(DataGridView).GetField("toolTipControl", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
System.Reflection.FieldInfo toolTipFieldInfo=
toolTipControlFieldInfo.FieldType.GetField("toolTip", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
object toolTipControlInstance =
toolTipControlFieldInfo.GetValue(myDataGridView);
toolTipFieldInfo.SetValue(toolTipControlInstance, myToolTip);
Travaillez pour moi avec .net 3.5
Autres conseils
Comme le nom de l'événement l'indique, il souhaite simplement que le texte soit affiché, sans formatage.
Si vous souhaitez une mise en forme en gras ou autre, vous devrez gérer vous-même l'affichage et le dessin de la pointe de l'outil. Vous pouvez utiliser le contrôle ToolTip pour vous aider, en définissant la propriété OwnerDraw sur true et en gérant l'événement Draw, mais notez que vous devrez probablement remplacer la grille de manière significative pour pouvoir entrer dans cet événement au moment opportun.