Jak mogę dodać wskazówkę lub podpowiedź do etykiety w C # Winforms?
81
Wydaje się, że Labelnie ma Hintlub ToolTiplub Hovertextmienia. Jaka jest więc preferowana metoda wyświetlania podpowiedzi, podpowiedzi lub tekstu po najechaniu Labelmyszą?
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.");
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");
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.
Odpowiedzi:
ToolTip
Najpierw 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
ToolTip
kontrolki o nazwietoolTip1
:źródło
ToolTip
formant 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.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.");
źródło
System.Windows.Forms.ToolTip ToolTip1 = new System.Windows.Forms.ToolTip(); ToolTip1.SetToolTip( Label1, "Label for Label1");
źródło
po prostu inny sposób, aby to zrobić.
Label lbl = new Label(); new ToolTip().SetToolTip(lbl, "tooltip text here");
źródło
Ż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;
źródło