Come faccio ad aggiungere una descrizione comandi a un controllo?


154

Ho alcuni controlli che vorrei visualizzare ToolTipper quando il mouse ci passa sopra. Come posso fare questo? Vorrei sapere come farlo correttamente nel codice, ma anche nel designer (C'è un ToolTipcomponente nella casella degli strumenti, ma non lo capisco ... capito).

Non sarei sorpreso se questo è un duplicato, ma posso trovare solo domande che si trovano su scenari più avanzati e specifici. Mi piacerebbe conoscere le basi.



Correlati e ancora vecchi (vale per .NET in generale): stackoverflow.com/questions/168550/…
Christopher Kyle Horton,

Risposte:


208

Ecco il tuo articolo per farlo con il codice

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
Quindi suppongo che non abbia importanza se la toolTip1variabile esce dal campo di applicazione?
Svish,

1
Che dire di una statica ToolTipper tutte le tue forme?
Svish,

7
Sarebbe stato liberato una volta diventato non referenziato, cosa che non sarebbe, dato che il pulsante e la casella di controllo lo farebbero ancora riferimento
Rowland Shaw,

2
Lo stanno facendo riferimento perché "SetToolTip" aggiunge EventHandlers al pulsante e agli eventi della casella di controllo
Eduardo Wada,

3
Penso che sia una cattiva idea inserire la descrizione comandi in una variabile statica. Cosa succede se un modulo viene chiuso e riaperto? SetTooltip funzionerà di nuovo? E se è così, i gestori del modulo chiuso rimarranno in memoria o rimossi correttamente? Non passerei nemmeno un minuto a testarlo. Usa invece un membro variabe - questo è a prova di proiettile!
Elmue,

138

Trascina un controllo tooltip dalla casella degli strumenti sul modulo. Non hai davvero bisogno di dargli altre proprietà oltre a un nome. Quindi, nelle proprietà del controllo su cui si desidera avere una descrizione comandi, cercare una nuova proprietà con il nome del controllo descrizione comandi appena aggiunto. Per impostazione predefinita, ti fornirà una descrizione comandi quando il cursore passa il controllo.


54
Assicurarsi che quando si esegue questa operazione (come alle 2:00) che si utilizza un controllo ToolTip e non un controllo ToolStrip.
Adrian K,

2
Con questa risposta, l'aggiunta di un solo tooltip al winform fornisce a tutti i controlli del form il loro tooltip.
Sal

Potente nella sua semplicità, assicurati di lasciarlo sul controllo giusto e non su quello accanto (come alle 2 del mattino).
Michael Stimson,

40
  1. Aggiungi un componente ToolTip al modulo
  2. Seleziona uno dei controlli per cui desideri un suggerimento
  3. Apri la griglia delle proprietà ( F4), nell'elenco troverai una proprietà chiamata "ToolTip on toolTip1" (o qualcosa di simile). Impostare il testo della descrizione comandi desiderato su quella proprietà.
  4. Ripeti 2-3 per gli altri controlli
  5. Fatto.

Il trucco qui è che il controllo ToolTip è un controllo extender , il che significa che estenderà il set di proprietà per altri controlli nel modulo. Dietro le quinte questo si ottiene generando codice come nella risposta di Svetlozar. Esistono altri controlli che funzionano allo stesso modo (come il HelpProvider).


1
Quindi puoi usare la stessa descrizione comandi per molti controlli con testi diversi?
Svish,

@Svish: sì, questo è lo scopo dei controlli extender.
Fredrik Mörk,

Può essere utilizzato anche attraverso controlli utente e moduli? Come se hai creato una descrizione comandi statica con i valori delle proprietà standard. O sarebbe considerata una cattiva pratica?
Svish,

Non l'ho mai provato, e non conosco del tutto il funzionamento interno di ToolTip, ma dal momento che ottiene un riferimento al controllo a cui è correlato un testo, credo che potrebbe funzionare. Solo un modo per scoprirlo; provalo: o)
Fredrik Mörk,

Beh, ovviamente lo proverò. Ma non sono particolarmente bravo a trovare cose come perdite di memoria e simili ... E se ciò causasse una perdita di memoria o qualcosa del genere che vorrei sapere, hehe.
Svish,

8

ToolTip in C # è molto facile da aggiungere a quasi tutti i controlli dell'interfaccia utente. Non è necessario aggiungere alcun evento MouseHover per questo.

Così è come si fa-

  1. Aggiungi un oggetto ToolTip al tuo modulo. Un oggetto è sufficiente per l'intero modulo. ToolTip toolTip = new ToolTip();

  2. Aggiungi il controllo alla descrizione comando con il testo desiderato.

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


1

L'ho fatto in questo modo: basta aggiungere l'evento a qualsiasi controllo, impostare il tag del controllo e aggiungere un condizionale per gestire la descrizione comando per il controllo / tag appropriato.

private void Info_MouseHover(object sender, EventArgs e)
{
    Control senderObject = sender as Control;
    string hoveredControl = senderObject.Tag.ToString();

    // only instantiate a tooltip if the control's tag contains data
    if (hoveredControl != "")
    {
        ToolTip info = new ToolTip
        {
            AutomaticDelay = 500
        };

        string tooltipMessage = string.Empty;

        // add all conditionals here to modify message based on the tag 
        // of the hovered control
        if (hoveredControl == "save button")
        {
            tooltipMessage = "This button will save stuff.";
        }

        info.SetToolTip(senderObject, tooltipMessage);
    }
}

-3

Basta iscriversi all'evento ToolTipTextNeeded del controllo e restituire e.TooltipText, molto più semplice.


6
Non penso che sia un evento di controllo WinForm standard.
Dan7,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.