2009-08-27 11 views
130

J'ai quelques contrôles que je voudrais afficher un ToolTip lorsque la souris survole dessus. Comment puis-je faire ceci? Je voudrais savoir comment le faire correctement dans le code, mais aussi dans le concepteur (Il y a un composant ToolTip dans la boîte à outils, mais je ne comprends pas vraiment ... l'obtenir).C#: Comment ajouter une info-bulle à un contrôle?

Je ne serais pas surpris s'il s'agit d'un doublon, mais je peux seulement trouver des questions qui sont sur des scénarios plus avancés et spécifiques. Je voudrais connaître les bases.

+0

double possible de [Affichage info-bulle sur le vol stationnaire de la souris d'un texte] (http://stackoverflow.com/questions/873175/displaying-tooltip-on-mouse-hover-of-a -text) –

+0

Relatif, et plus encore (s'applique à .NET en général): https://stackoverflow.com/questions/168550/display-a-tooltip-over-a-button-using-windows-forms –

Répondre

168

Here est votre article pour le faire avec le code

private void Form1_Load(object sender, System.EventArgs e) 
{ 
     // Create the ToolTip and associate with the Form container. 
     ToolTip toolTip1 = new ToolTip(); 

     // Set up the delays for the ToolTip. 
     toolTip1.AutoPopDelay = 5000; 
     toolTip1.InitialDelay = 1000; 
     toolTip1.ReshowDelay = 500; 
     // Force the ToolTip text to be displayed whether or not the form is active. 
     toolTip1.ShowAlways = true; 

     // Set up the ToolTip text for the Button and Checkbox. 
     toolTip1.SetToolTip(this.button1, "My button1"); 
     toolTip1.SetToolTip(this.checkBox1, "My checkBox1"); 
} 
+3

Donc je suppose que cela n'a pas d'importance si la variable 'toolTip1' tombe hors de la portée? – Svish

+0

Eh bien, c'est important.Il est préférable d'en faire un membre de classe, si vous voulez le gérer à partir d'une autre fonction. –

+1

Qu'en est-il d'une «info-bulle» statique pour tous vos formulaires? – Svish

111

Faites glisser un contrôle infobulle de la boîte à outils sur votre formulaire. Vous n'avez pas vraiment besoin de lui donner des propriétés autres qu'un nom. Ensuite, dans les propriétés du contrôle sur lesquelles vous souhaitez avoir une info-bulle, recherchez une nouvelle propriété avec le nom du contrôle de l'info-bulle que vous venez d'ajouter. Il vous donnera par défaut une info-bulle lorsque le curseur survole le contrôle.

+1

Ceci est une très bonne réponse. La simplicité est la clé. –

+36

Assurez-vous que lorsque vous faites cela (comme à 2h du matin) que vous utilisez un contrôle ToolTip et non un contrôle ToolStrip. –

+1

Avec cette réponse, l'ajout d'une seule info-bulle au winform donne à tous les contrôles du formulaire leur propre info-bulle. – SAm

34
  1. Ajouter un composant ToolTip à votre formulaire
  2. Sélectionnez l'une des commandes que vous voulez un outil de pointe pour
  3. Ouvrez la grille de la propriété (F4), dans la liste, vous trouverez une propriété appelée "Info-bulle sur toolTip1" (ou quelque chose de similaire). Définissez le texte de l'info-bulle souhaité sur cette propriété.
  4. Répéter 2-3 pour les autres contrôles
  5. Terminé.

L'astuce ici est que le contrôle ToolTip est un contrôle d'extension , ce qui signifie qu'il étendra l'ensemble des propriétés pour autres contrôles sur le formulaire. Dans les coulisses, ceci est réalisé en générant du code comme dans la réponse de Svetlozar. D'autres contrôles fonctionnent de la même manière (par exemple le HelpProvider).

+1

Donc, vous pouvez utiliser la même info-bulle pour de nombreux contrôles avec des textes différents? – Svish

+0

@Svish: oui, c'est le but des contrôles d'extension. –

+0

Peut-il être utilisé aussi pour les contrôles et les formulaires? Comme si vous créiez une info-bulle statique avec vos valeurs de propriété standard. Ou serait-ce considéré comme une mauvaise pratique? – Svish

-2

Abonnez-vous à l'événement ToolTipTextNeeded du contrôle et renvoyez e.TooltipText, beaucoup plus simplement.

+4

Je ne pense pas que ce soit un événement de contrôle WinForm standard. – Dan7

5

L'info-bulle en C# est très facile à ajouter à presque tous les contrôles de l'interface utilisateur. Vous n'avez pas besoin d'ajouter d'événement MouseHover pour cela.

Voici comment faire it-

  1. Ajouter un objet ToolTip à votre formulaire. Un objet est suffisant pour la forme entière. ToolTip toolTip = new ToolTip();

  2. Ajoutez le contrôle à l'info-bulle avec le texte souhaité.

    toolTip.SetToolTip(Button1,"Click here");

Questions connexes