2012-03-19 28 views
69

Có vẻ như là Label không có thuộc tính Hint hoặc ToolTip hoặc Hovertext. Vì vậy, phương pháp ưa thích để hiển thị gợi ý, chú giải công cụ hoặc văn bản di chuột khi chuột được tiếp cận là Label là gì?Làm cách nào để thêm gợi ý hoặc chú giải công cụ vào nhãn trong C# Winforms?

+0

Có thể trùng lặp [Hiển thị chú giải công cụ trên di chuột của văn bản] (http://stackoverflow.com/questions/873175/displaying-tooltip-on-mouse-hover-of-a-text) –

Trả lời

89

Trước tiên, bạn phải thêm điều khiển ToolTip vào biểu mẫu của mình. Sau đó, bạn có thể đặt văn bản sẽ hiển thị cho các điều khiển khác.

Dưới đây là một bức ảnh chụp các nhà thiết kế sau khi thêm một điều khiển ToolTip được đặt tên toolTip1:

enter image description here

+13

Ồ, có vẻ phức tạp/phản trực giác, Yuck. –

+0

@ClayShannon Theo cách tôi cho là vậy. Nhưng thiết kế có phần thanh lịch. Một số điều khiển sẽ không bao giờ muốn các mẹo công cụ. Bằng cách này, điều khiển 'ToolTip' chỉ có thể đăng ký chính nó để di chuột qua các sự kiện và hiển thị văn bản thích hợp tùy thuộc vào sự kiện được nêu ra. Tất cả điều này xảy ra trong nền. – Yuck

+1

Tôi đồng ý. Nó cũng cho phép bạn sử dụng cùng một điều khiển tooltip cho nhiều điều khiển. –

18
System.Windows.Forms.ToolTip ToolTip1 = new System.Windows.Forms.ToolTip(); 
ToolTip1.SetToolTip(Label1, "Label for Label1"); 
69
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."); 
+7

Rất hữu ích cho chú giải công cụ động, cảm ơn bạn! – Pisu

+0

Đừng quên vứt bỏ tooltip nếu bạn làm điều này rất nhiều trên mỗi mouseover, bạn sẽ bị rò rỉ xử lý cho đến khi GC gọi finalizer trên tooltips cũ hơn. – drake7707

11

chỉ là một cách để làm điều đó.

Label lbl = new Label(); 
new ToolTip().SetToolTip(lbl, "tooltip text here"); 
+0

Tôi thích ý tưởng này; nhưng bạn có nghĩa là "lbl" không phải "nhãn" trên dòng thứ hai, phải không? –

+1

Vâng, cảm ơn. Thưa ngài. – ac0de

4

Chỉ cần để chia sẻ ý tưởng của tôi ...

Tôi tạo ra một lớp tùy chỉnh để kế thừa lớp Label. Tôi đã thêm một biến riêng được gán làm lớp Tooltip và thuộc tính công khai, TooltipText. Sau đó, cho nó một phương pháp đại biểu MouseEnter. Đây là một cách dễ dàng để làm việc với nhiều điều khiển Label và không phải lo lắng về việc gán điều khiển Tooltip cho mỗi điều khiển 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); 
      } 
     } 
    } 

Trong hình thức hay phương thức InitializeComponent người dùng kiểm soát của (mã thiết kế), phân công lại điều khiển Label của mình vào lớp tùy chỉnh:

this.lblMyLabel = new ucLabel(); 

Ngoài ra, thay đổi các tham chiếu biến tin trong phần mã designer:

private ucLabel lblMyLabel; 
+0

Nhưng không phải là nhà thiết kế mã được tái tạo mỗi lần người dùng thay đổi một cái gì đó bằng cách sử dụng thiết kế hình ảnh trực quan? – ensisNoctis

Các vấn đề liên quan