Afficher une info-bulle sur un bouton à l'aide de Windows Forms

Réponses:

222

L'info-bulle est en fait un contrôle WinForms qui gère l'affichage des info-bulles pour plusieurs éléments sur un même formulaire.

Supposons que votre bouton s'appelle MyButton.

  1. Ajoutez un contrôle Info-bulle (sous Contrôles communs dans la boîte à outils Windows Forms) à votre formulaire.
  2. Donnez-lui un nom - dites MyToolTip
  3. Définissez la propriété "Info-bulle sur MyToolTip" de MyButton (sous Divers dans la grille de propriétés du bouton) sur le texte qui doit apparaître lorsque vous passez la souris dessus.

L'info-bulle apparaît automatiquement lorsque le curseur survole le bouton, mais si vous devez l'afficher par programme, appelez

MyToolTip.Show("Tooltip text goes here", MyButton)

dans votre code pour afficher l'info-bulle, et MyToolTip.Hide (MyButton) pour le faire disparaître à nouveau.

Dylan Beattie
la source
bien, mais une question: si j'ai plus d'un bouton dans un formulaire, j'ai besoin de plus d'info-bulle ou je peux définir plusieurs descriptions et boutons pour la même info-bulle?
ghiboz
8
Votre formulaire n'a besoin que d'un seul contrôle ToolTip - chaque bouton peut avoir un texte d'aide différent (c'est pourquoi la "Tooltip on MyToolTip" est une propriété du contrôle associé, pas du contrôle ToolTip lui-même)
Dylan Beattie
2
Dans le cas le plus simple, ajouter l'info-bulle au formulaire est la meilleure chose à faire. Problème: au moment de la conception d'un contrôle personnalisé, vous n'avez aucune référence au formulaire parent. Solution: créez un objet info-bulle dans le contrôle. Ne pensez pas à l'objet info-bulle comme nécessairement attaché au formulaire.
Stéphane Gourichon
93

Utilisation du concepteur de formulaires:

  • Faites glisser le contrôle Info-bulle de la boîte à outils sur le formulaire.
  • Sélectionnez les propriétés du contrôle sur lequel vous souhaitez que l'infobulle apparaisse.
  • Recherchez la propriété 'ToolTip on toolTip1' (le nom peut ne pas être toolTip1 si vous avez changé son nom par défaut).
  • Définissez le texte de la propriété sur le texte de l'info-bulle que vous souhaitez afficher.

Vous pouvez également définir l'info-bulle par programmation en utilisant l'appel suivant:

this.toolTip1.SetToolTip(this.targetControl, "My Tool Tip");
jmatthias
la source
45

Vous pouvez utiliser la classe ToolTip:

Création d'une info-bulle pour un contrôle

Exemple:

private void Form1_Load(object sender, System.EventArgs e)
{
    System.Windows.Forms.ToolTip ToolTip1 = new System.Windows.Forms.ToolTip();
    ToolTip1.SetToolTip(this.Button1, "Hello");
}
DaveK
la source
1
C'est la solution parfaite car elle s'intègre directement avec le code VS généré automatiquement. Merci :)
anon58192932
@DaveK Merci. C'est mieux ainsi parce que je peux définir toutes les info-bulles sur un seul endroit
fedeteka
Merci. La réponse la meilleure et la plus simple à cette question.
Najeeb
Encore plus court:new ToolTip().SetToolTip(this.Button1, "Hello");
The_Black_Smurf
6

Pour l'infobulle par défaut, cela peut être utilisé -

System.Windows.Forms.ToolTip ToolTip1 = new System.Windows.Forms.ToolTip();
ToolTip1.SetToolTip(this.textBox1, "Hello world");

Une info-bulle personnalisée peut également être utilisée dans le cas où un formatage est requis pour le message d'info-bulle. Cela peut être créé en mettant en forme le formulaire personnalisé et en l'utilisant comme boîte de dialogue d'info-bulle sur l'événement de survol de la souris du contrôle. Veuillez vérifier le lien suivant pour plus de détails -

http://newapputil.blogspot.in/2015/08/create-custom-tooltip-dialog-from-form.html

nvivekgoyal
la source
5

Stockage de texte paresseux et compact dans la propriété Tag

Si vous êtes un peu paresseux et n'utilisez pas la propriété Tag des contrôles pour autre chose, vous pouvez l'utiliser pour stocker le texte de l'info-bulle et affecter des gestionnaires d' événements MouseHover à tous ces contrôles en une seule fois comme ceci:

    private System.Windows.Forms.ToolTip ToolTip1;
    private void PrepareTooltips()
    {
        ToolTip1 = new System.Windows.Forms.ToolTip();
        foreach(Control ctrl in this.Controls)
        {
            if (ctrl is Button && ctrl.Tag is string)
            {
                ctrl.MouseHover += new EventHandler(delegate(Object o, EventArgs a)
                {
                    var btn = (Control)o;
                    ToolTip1.SetToolTip(btn, btn.Tag.ToString());
                });
            }
        }
    }

Dans ce cas, tous les boutons ayant une chaîne dans la propriété Tag reçoivent un événement MouseHover . Pour le garder compact, l' événement MouseHover est défini en ligne à l'aide d'une expression lambda. Dans l'éventualité où le bouton plané aura son balise texte attribué à l'info - bulle et affiché.

flodis
la source
4

Le framework .NET fournit une classe ToolTip. Ajoutez-en un à votre formulaire, puis lors de l'événement MouseHover pour chaque élément pour lequel vous souhaitez une info-bulle, procédez comme suit:

    private void checkBox1_MouseHover(object sender, EventArgs e)
    {
        toolTip1.Show("text", checkBox1);
    }
Timothy Carter
la source
4
private void Form1_Load(object sender, System.EventArgs e)
{
    ToolTip toolTip1 = new ToolTip();
    toolTip1.AutoPopDelay = 5000;
    toolTip1.InitialDelay = 1000;
    toolTip1.ReshowDelay = 500;
    toolTip1.ShowAlways = true;
    toolTip1.SetToolTip(this.button1, "My button1");
    toolTip1.SetToolTip(this.checkBox1, "My checkBox1");
}
akn
la source
4
Bien que cet extrait de code puisse résoudre la question, y compris une explication aide vraiment à améliorer la qualité de votre message. N'oubliez pas que vous répondrez à la question des lecteurs à l'avenir et que ces personnes ne connaissent peut-être pas les raisons de votre suggestion de code.
secelite
0

Sur la base de la réponse de DaveK , j'ai créé une extension de contrôle:

public static void SetToolTip(this Control control, string txt)
{
    new ToolTip().SetToolTip(control, txt);
}

Ensuite, vous pouvez définir l'info-bulle pour n'importe quel contrôle avec une seule ligne:

this.MyButton.SetToolTip("Hello world");
The_Black_Smurf
la source
-4

Bien sûr, il suffit de gérer l'événement mousehover et de lui indiquer d'afficher une info-bulle. t est une info-bulle définie soit dans les globales, soit dans le constructeur en utilisant:

ToolTip t = new ToolTip();

puis le gestionnaire d'événements:

private void control_MouseHover(object sender, EventArgs e)
{
  t.Show("Text", (Control)sender);
}
Frire
la source
2
Je pense que vous avez été rejeté parce que ce n'est pas la façon d'utiliser les contrôles ToolTip dans Windows Forms. Vous n'avez besoin que d'un seul contrôle sur le formulaire et il montre les conseils pour tous les contrôles. Voir le code dans les autres réponses.
Julian Melville
1
Je suppose que l'explication ne correspond pas au code, où dans l'explication j'ai dit l'afficher et dans le code je l'ai également initialisé. Ma faute. : P
Fry
2
@ julianz En fait, cela fonctionne bien pour avoir des info-bulles spécialisées qui peuvent être dynamiques si vous le souhaitez en fonction de l'état (moins bien sûr la création - pardonnez-moi, j'essayais simplement de tout ranger dans un bloc.) Quant aux autres réponses sur un veine similaire ... yshuditelu et Dylan Beattie étaient similaires bien que sans l'instanciation.
Fry