Как добавить подсказку или всплывающую подсказку к метке в C # Winforms?
81
Кажется, что у Labelних нет Hintни ToolTipили Hovertextсобственности. Итак, какой метод лучше всего отображать подсказку, всплывающую подсказку или текст при наведении курсора мыши при Labelприближении к объекту мыши?
ToolTipСначала вы должны добавить элемент управления в свою форму. Затем вы можете установить текст, который должен отображаться для других элементов управления.
Вот скриншот, показывающий дизайнера после добавления элемента ToolTipуправления с именем toolTip1:
@ClayShannon В некотором смысле, я полагаю, это так. Но дизайн несколько изящный. Некоторым элементам управления никогда не потребуются подсказки. Таким образом, ToolTipэлемент управления может просто зарегистрировать себя для наведения указателя мыши на события и отображать правильный текст в зависимости от возникшего события. Все это происходит в фоновом режиме.
Yuck
1
Я согласен. Он также позволяет использовать один и тот же элемент управления всплывающей подсказки для нескольких элементов управления.
Марк Эйнсворт
@MarkAinsworth, поскольку в одном комментарии говорится, что это хорошо, а в другом - плохо, возможно, вы заявите, согласны ли вы, что это хорошо или что это плохо? . Я полагаю, вы говорите, что согласны, это хорошо.
barlop
Я считаю, что это плохой дизайн, потому что он поддерживает только статическую всплывающую подсказку. Как бы вы обновили всплывающую подсказку во время выполнения?
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.");
Не забудьте удалить всплывающую подсказку, если вы будете делать это часто при каждом наведении указателя мыши, вы будете терять дескрипторы, пока GC не вызовет финализатор в старых всплывающих подсказках.
drake7707
21
System.Windows.Forms.ToolTip ToolTip1 = new System.Windows.Forms.ToolTip();
ToolTip1.SetToolTip( Label1, "Label for Label1");
Я создал собственный класс, унаследовавший от класса Label. Я добавил частную переменную, назначенную как класс Tooltip, и общедоступное свойство TooltipText. Затем передал ему метод делегата MouseEnter. Это простой способ работать с несколькими элементами управления Label, и вам не нужно беспокоиться о назначении элемента управления Tooltip для каждого элемента управления Label.
В методе InitializeComponent формы или пользовательского элемента управления (код конструктора) переназначьте элемент управления Label настраиваемому классу:
this.lblMyLabel = new ucLabel();
Также измените ссылку на частную переменную в коде конструктора:
Ответы:
ToolTip
Сначала вы должны добавить элемент управления в свою форму. Затем вы можете установить текст, который должен отображаться для других элементов управления.Вот скриншот, показывающий дизайнера после добавления элемента
ToolTip
управления с именемtoolTip1
:источник
ToolTip
элемент управления может просто зарегистрировать себя для наведения указателя мыши на события и отображать правильный текст в зависимости от возникшего события. Все это происходит в фоновом режиме.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.");
источник
System.Windows.Forms.ToolTip ToolTip1 = new System.Windows.Forms.ToolTip(); ToolTip1.SetToolTip( Label1, "Label for Label1");
источник
просто еще один способ сделать это.
Label lbl = new Label(); new ToolTip().SetToolTip(lbl, "tooltip text here");
источник
Просто чтобы поделиться своей идеей ...
Я создал собственный класс, унаследовавший от класса Label. Я добавил частную переменную, назначенную как класс Tooltip, и общедоступное свойство TooltipText. Затем передал ему метод делегата MouseEnter. Это простой способ работать с несколькими элементами управления Label, и вам не нужно беспокоиться о назначении элемента управления Tooltip для каждого элемента управления Label.
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); } } }
В методе InitializeComponent формы или пользовательского элемента управления (код конструктора) переназначьте элемент управления Label настраиваемому классу:
this.lblMyLabel = new ucLabel();
Также измените ссылку на частную переменную в коде конструктора:
private ucLabel lblMyLabel;
источник