Jak mogę dodać wskazówkę lub podpowiedź do etykiety w C # Winforms?

Odpowiedzi:

112

ToolTipNajpierw musisz dodać kontrolkę do swojego formularza. Następnie możesz ustawić tekst, który ma być wyświetlany dla innych kontrolek.

Oto zrzut ekranu przedstawiający projektanta po dodaniu ToolTipkontrolki o nazwie toolTip1:

wprowadź opis obrazu tutaj

Fuj
źródło
20
Wow, to wydaje się zawiłe / sprzeczne z intuicją, fuj.
B. Clay Shannon
@ClayShannon W pewnym sensie tak sądzę. Ale projekt jest dość elegancki. Niektóre kontrolki nigdy nie będą potrzebować wskazówek dotyczących narzędzi. W ten sposób ToolTipformant może po prostu zarejestrować się w celu umieszczenia wskaźnika myszy na zdarzeniach i wyświetlić odpowiedni tekst w zależności od wywołanego zdarzenia. To wszystko dzieje się w tle.
Fuj
1
Zgadzam się. Pozwala także na użycie tej samej kontrolki podpowiedzi dla wielu kontrolek.
Mark Ainsworth
@MarkAinsworth, ponieważ jeden komentarz mówi, że jest dobry, a drugi, że jest zły, być może stwierdzasz, czy zgadzasz się, że jest dobry, czy zgadzasz się, że jest zły? . Przypuszczam, że mówisz, że zgadzasz się, że to dobre.
barlop,
Myślę, że to zły projekt, ponieważ obsługuje tylko statyczną podpowiedź. Jak zaktualizowałbyś podpowiedź w czasie wykonywania?
Arvo Bowen
91
yourToolTip = new ToolTip();
//The below are optional, of course,

yourToolTip.ToolTipIcon = ToolTipIcon.Info;
yourToolTip.IsBalloon = true;
yourToolTip.ShowAlways = true;

yourToolTip.SetToolTip(lblYourLabel,"Oooh, you put your mouse over me.");
SeeSharp
źródło
Nie zapomnij pozbyć się podpowiedzi, jeśli robisz to często po każdym najechaniu myszą, będziesz przeciekać uchwyty, dopóki GC nie wywoła finalizatora starszych podpowiedzi.
drake7707
21
System.Windows.Forms.ToolTip ToolTip1 = new System.Windows.Forms.ToolTip();
ToolTip1.SetToolTip( Label1, "Label for Label1");
scibuff
źródło
15

po prostu inny sposób, aby to zrobić.

Label lbl = new Label();
new ToolTip().SetToolTip(lbl, "tooltip text here");
ac0de
źródło
5

Żeby podzielić się moim pomysłem ...

Utworzyłem niestandardową klasę, aby dziedziczyć klasę Label. Dodałem prywatną zmienną przypisaną jako klasa Tooltip i publiczną właściwość TooltipText. Następnie dał mu metodę delegata MouseEnter. Jest to łatwy sposób pracy z wieloma kontrolkami etykiet i nie musisz się martwić o przypisywanie kontrolki etykiety narzędzi do każdej kontrolki etykiety.

    public partial class ucLabel : Label
    {
        private ToolTip _tt = new ToolTip();

        public string TooltipText { get; set; }

        public ucLabel() : base() {
            _tt.AutoPopDelay = 1500;
            _tt.InitialDelay = 400;
//            _tt.IsBalloon = true;
            _tt.UseAnimation = true;
            _tt.UseFading = true;
            _tt.Active = true;
            this.MouseEnter += new EventHandler(this.ucLabel_MouseEnter);
        }

        private void ucLabel_MouseEnter(object sender, EventArgs ea)
        {
            if (!string.IsNullOrEmpty(this.TooltipText))
            {
                _tt.SetToolTip(this, this.TooltipText);
                _tt.Show(this.TooltipText, this.Parent);
            }
        }
    }

W metodzie InitializeComponent formularza lub kontrolki użytkownika (kod projektanta), ponownie przypisuj kontrolkę Label do klasy niestandardowej:

this.lblMyLabel = new ucLabel();

Zmień również odwołanie do zmiennej prywatnej w kodzie projektanta:

private ucLabel lblMyLabel;
cChacon
źródło
Ale czy kod projektanta nie jest generowany ponownie za każdym razem, gdy użytkownik zmieni coś za pomocą projektanta wizualnego formularza?
Robert Synoradzki