Wyświetl etykietkę przycisku nad formularzem Windows Forms

Odpowiedzi:

222

ToolTip jest w rzeczywistości formantem WinForm, który obsługuje wyświetlanie podpowiedzi dla wielu elementów w jednym formularzu.

Powiedz, że twój przycisk nazywa się MyButton.

  1. Dodaj formant ToolTip (w obszarze Wspólne formanty w przyborniku Windows Forms) do formularza.
  2. Nadaj temu nazwę - powiedz MyToolTip
  3. Ustaw właściwość „Tooltip na MyToolTip” MyButton (w sekcji Misc w siatce właściwości przycisku) na tekst, który powinien się pojawić po najechaniu na nią myszą.

Etykietka pojawi się automatycznie, gdy kursor najedzie na przycisk, ale jeśli chcesz go wyświetlić programowo, zadzwoń

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

w kodzie, aby wyświetlić etykietkę, oraz MyToolTip.Hide (MyButton), aby ponownie zniknęła.

Dylan Beattie
źródło
fajnie, ale pytanie: jeśli mam więcej niż jeden przycisk w formularzu, potrzebuję więcej podpowiedzi lub mogę ustawić wiele opisów i przycisków dla tego samego podpowiedzi?
ghiboz
8
Twoja postać potrzebuje tylko jednego przełącznika etykietka - każdy przycisk może mieć inny tekst pomocy (to dlaczego „Etykietka na MyToolTip” jest właściwością sterowania i kontroli, a nie samej kontroli etykietka)
Dylan Beattie
2
W najprostszym przypadku najlepiej jest dodać etykietkę do formularza. Problem: w czasie projektowania kontroli niestandardowej nie ma odniesienia do formularza nadrzędnego. Rozwiązanie: utwórz obiekt podpowiedzi w Kontrolce. Nie myśl o tym, że obiekt ToolTip jest koniecznie dołączony do formularza.
Stéphane Gourichon
93

Za pomocą projektanta formularzy:

  • Przeciągnij kontrolkę ToolTip z Przybornika na formularz.
  • Wybierz właściwości kontrolki, na której ma się pojawiać podpowiedź.
  • Znajdź właściwość „ToolTip na toolTip1” (nazwa może nie być toolTip1, jeśli zmieniono jej domyślną nazwę).
  • Ustaw tekst właściwości na tekst podpowiedzi, który chcesz wyświetlić.

Możesz także ustawić podpowiedź programowo za pomocą następującego wywołania:

this.toolTip1.SetToolTip(this.targetControl, "My Tool Tip");
jmatthias
źródło
45

Możesz użyć klasy ToolTip:

Tworzenie podpowiedzi dla kontrolki

Przykład:

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
źródło
1
Jest to idealne rozwiązanie, ponieważ integruje się bezpośrednio z automatycznie generowanym kodem VS. Dzięki :)
anon58192932
@DaveK Dzięki. Tak jest lepiej, ponieważ mogę zdefiniować wszystkie podpowiedzi w jednym miejscu
fedeteka
Dzięki. Najlepsza i najprostsza odpowiedź na to pytanie.
Najeeb
Jeszcze krótszy:new ToolTip().SetToolTip(this.Button1, "Hello");
The_Black_Smurf
6

W przypadku domyślnej podpowiedzi można tego użyć -

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

Dostosowaną podpowiedź można również zastosować w przypadku, gdy formatowanie jest wymagane w przypadku wiadomości podpowiedzi. Można to utworzyć poprzez niestandardowe formatowanie formularza i użycie go jako okna dialogowego podpowiedzi w przypadku zdarzenia najechania myszą kontrolki. Proszę sprawdzić poniższy link, aby uzyskać więcej informacji -

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

nvivekgoyal
źródło
5

Leniwe i kompaktowe przechowywanie tekstu we właściwości Tag

Jeśli jesteś trochę leniwy i nie używasz właściwości Tag elementów sterujących do niczego innego, możesz użyć jej do zapisania tekstu podpowiedzi i przypisać moduły obsługi zdarzeń MouseHover do wszystkich takich elementów sterujących za jednym razem:

    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());
                });
            }
        }
    }

W tym przypadku wszystkim przyciskom posiadającym ciąg znaków we właściwości Tag przypisuje się zdarzenie MouseHover . Aby zachować kompaktowość, zdarzenie MouseHover jest definiowane bezpośrednio za pomocą wyrażenia lambda. W przypadku, gdy dowolny przycisk zostanie nałożony, jego etykieta zostanie przypisana do etykietki narzędzia i wyświetlona.

Flodis
źródło
4

.NET Framework zapewnia klasę ToolTip. Dodaj jedną z nich do formularza, a następnie w zdarzeniu MouseHover dla każdego elementu, dla którego chcesz podpowiedź, wykonaj następujące czynności:

    private void checkBox1_MouseHover(object sender, EventArgs e)
    {
        toolTip1.Show("text", checkBox1);
    }
Timothy Carter
źródło
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
źródło
4
Ten fragment kodu może rozwiązać pytanie, ale wyjaśnienie naprawdę pomaga poprawić jakość posta. Pamiętaj, że w przyszłości odpowiadasz na pytanie dla czytelników, a ci ludzie mogą nie znać przyczyn Twojej sugestii kodu.
secelite
0

Na podstawie odpowiedzi DaveK stworzyłem rozszerzenie kontroli:

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

Następnie możesz ustawić etykietkę dla dowolnego elementu sterującego za pomocą jednej linii:

this.MyButton.SetToolTip("Hello world");
The_Black_Smurf
źródło
-4

Jasne, po prostu obsłuż kursor myszy i powiedz mu, aby wyświetlił podpowiedź. t to podpowiedź zdefiniowana w globals lub w konstruktorze przy użyciu:

ToolTip t = new ToolTip();

następnie moduł obsługi zdarzeń:

private void control_MouseHover(object sender, EventArgs e)
{
  t.Show("Text", (Control)sender);
}
Smażyć
źródło
2
Myślę, że zostałeś odrzucony, ponieważ nie jest to sposób używania formantów ToolTip w Windows Forms. Potrzebujesz tylko jednego takiego formantu w formularzu, który pokazuje wskazówki dla wszystkich formantów. Zobacz kod w innych odpowiedziach.
Julian Melville,
1
Wydaje mi się, że wyjaśnienie nie pasuje do kodu. Gdzie w wyjaśnieniu powiedziałem, wyświetl go, a także w kodzie, który go zainicjowałem. Mój błąd. : P
Fry
2
@ julianz Właściwie to działa dobrze, ponieważ ma specjalne podpowiedzi, które mogą być dynamiczne, jeśli chcesz w zależności od stanu (minus oczywiście tworzenie - wybacz mi, starałem się dopasować wszystko do jednego bloku). Co do innych odpowiedzi na podobna żyła ... yshuditelu i Dylan Beattie były podobne, choć bez instancji.
Smażyć