Jak dodać etykietkę narzędzia do kontrolki?


154

Mam pewne elementy sterujące, które chciałbym wyświetlić, ToolTipgdy kursor myszy znajduje się nad nim. W jaki sposób mogę to zrobić? Chciałbym wiedzieć, jak to zrobić poprawnie w kodzie, ale także w projektancie ( ToolTipw przyborniku jest komponent, ale nie całkiem… rozumiem).

Nie zdziwiłbym się, gdyby to był duplikat, ale mogę znaleźć tylko pytania dotyczące bardziej zaawansowanych, szczegółowych scenariuszy. Chciałbym poznać podstawy.



Powiązane i starsze (ogólnie dotyczy .NET): stackoverflow.com/questions/168550/…
Christopher Kyle Horton

Odpowiedzi:


208

Oto Twój artykuł dotyczący robienia tego z kodem

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
Więc chyba nie ma znaczenia, czy toolTip1zmienna wykracza poza zakres?
Svish

1
A co z jednym statycznym ToolTipdla wszystkich twoich formularzy?
Svish

7
Zostanie zwolniony, gdy przestanie istnieć odniesienie, co by nie było, ponieważ przycisk i pole wyboru nadal będą się do niego odwoływać
Rowland Shaw

2
Odwołują się do niego, ponieważ „SetToolTip” dodaje EventHandlers do zdarzeń przycisku i pola wyboru
Eduardo Wada

3
Myślę, że umieszczenie podpowiedzi w zmiennej statycznej to zły pomysł. Co się stanie, jeśli formularz zostanie zamknięty i ponownie otwarty? Czy SetTooltip znowu będzie działać? A jeśli tak, to czy programy obsługi formularza zamkniętego pozostaną w pamięci lub zostaną poprawnie usunięte? Nie spędziłbym nawet minuty na testowaniu tego. Zamiast tego użyj zmiennej członkowskiej - to jest kuloodporne!
Elmue,

138

Przeciągnij kontrolkę podpowiedzi z przybornika do formularza. Tak naprawdę nie musisz nadawać mu żadnych właściwości poza nazwą. Następnie we właściwościach kontrolki, dla której chcesz mieć podpowiedź, poszukaj nowej właściwości z nazwą właśnie dodanej kontrolki podpowiedzi. Domyślnie wyświetli podpowiedź, gdy kursor znajdzie się na kontrolce.


54
Upewnij się, że podczas wykonywania tej czynności (np. O 2 w nocy) używasz kontrolki ToolTip, a nie kontrolki ToolStrip.
Adrian K

2
W przypadku tej odpowiedzi dodanie tylko jednej podpowiedzi do winform daje wszystkim kontrolkom w formularzu własną podpowiedź.
Sob

Potężny w swojej prostocie, po prostu upewnij się, że upuścisz go na odpowiednią kontrolkę, a nie na tę obok (jak o 2 w nocy).
Michael Stimson

40
  1. Dodaj składnik ToolTip do formularza
  2. Wybierz jedną z kontrolek, dla których chcesz uzyskać podpowiedź
  3. Otwórz siatkę właściwości ( F4), na liście znajdziesz właściwość o nazwie „ToolTip on toolTip1” (lub coś podobnego). Ustaw żądany tekst podpowiedzi dla tej właściwości.
  4. Powtórz 2-3 dla pozostałych elementów sterujących
  5. Gotowe.

Sztuczka polega na tym, że formant ToolTip jest kontrolką rozszerzającą , co oznacza, że ​​rozszerzy zestaw właściwości dla innych kontrolek w formularzu. Za kulisami osiąga się to poprzez generowanie kodu, jak w odpowiedzi Svetlozar. Istnieją inne kontrolki działające w ten sam sposób (na przykład HelpProvider).


1
Więc możesz użyć tej samej etykiety narzędzi dla wielu kontrolek z różnymi tekstami?
Svish

@Svish: tak, taki jest cel kontroli rozszerzenia.
Fredrik Mörk

Czy można go również używać między kontrolkami użytkowników i formularzami? Podobnie jak w przypadku utworzenia statycznej etykiety narzędzi ze standardowymi wartościami właściwości. A może byłoby to uznane za złą praktykę?
Svish

Nigdy tego nie próbowałem i nie do końca znam wewnętrzne działanie ToolTip, ale ponieważ otrzymuje odniesienie do kontrolki, z którą powiązany jest tekst, myślę, że może działać. Tylko jeden sposób, aby się dowiedzieć; spróbuj: o)
Fredrik Mörk

Cóż, oczywiście spróbuję. Ale nie jestem szczególnie dobry w znajdowaniu takich rzeczy, jak wycieki pamięci i tym podobne ... A jeśli to spowodowałoby wyciek pamięci lub coś podobnego, chciałbym wiedzieć, hehe.
Svish

8

Etykietka narzędzi w języku C # jest bardzo łatwa do dodania do prawie wszystkich kontrolek interfejsu użytkownika. W tym celu nie musisz dodawać żadnego zdarzenia MouseHover.

Oto jak to zrobić-

  1. Dodaj obiekt ToolTip do formularza. Na całą formę wystarczy jeden przedmiot. ToolTip toolTip = new ToolTip();

  2. Dodaj kontrolkę do etykiety narzędzi z żądanym tekstem.

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


1

Zrobiłem to w ten sposób: po prostu dodaj zdarzenie do dowolnej kontrolki, ustaw znacznik kontrolki i dodaj warunek, aby obsłużyć etykietkę dla odpowiedniej kontrolki / tagu.

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

Po prostu zasubskrybuj zdarzenie ToolTipTextNeeded kontrolki i zwróć e.TooltipText, znacznie prostsze.


6
Nie sądzę, że jest to standardowe zdarzenie kontrolne WinForm.
Dan7,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.