2009-07-22 25 views
12

tôi đang bổ sung thêm một tooltip cho một nhãn như vậy:Làm cách nào để xóa chú giải công cụ hiện được gắn với điều khiển?

ToolTip LabelToolTip = new System.Windows.Forms.ToolTip(); 
LabelToolTip.SetToolTip(this.LocationLabel, text); 

Khi tôi cần phải thay đổi tooltip này như những thay đổi văn bản của nhãn, tôi cố gắng làm điều tương tự để thêm một tooltip mới. Thật không may, tooltip cũ vẫn còn dưới một cái mới, đó là thực sự gây phiền nhiễu. Có một phương pháp để loại bỏ các tooltip cũ, hoặc tôi nên chỉ cần thực hiện một nhãn mới khi tôi muốn thay đổi văn bản trong một nhãn?

Trả lời

15

Tạo một phiên bản ToolTip và sử dụng nó bất cứ khi nào bạn muốn hiển thị nó bằng phương pháp SetToolTip và sử dụng phương pháp Hide để ẩn nó. Nói chung, không nhất thiết phải tạo nhiều hơn một cá thể ToolTip.

+2

Ah, vì vậy, tôi chỉ cần có biến phiên bản lớp đang giữ đối tượng ToolTip thay vào đó và sử dụng lại khi cần thay đổi. Cảm ơn rất nhiều. – benmatth

4
public class ToolTipHelper 
{ 
    private readonly Dictionary<string, ToolTip> tooltips; 

    /// <summary> 
    /// Constructor 
    /// </summary> 
    public ToolTipHelper() 
    { 
     this.tooltips = new Dictionary<string, ToolTip>(); 
    } 

    /// <summary> 
    /// Key a tooltip by its control name 
    /// </summary> 
    /// <param name="controlName"></param> 
    /// <returns></returns> 
    public ToolTip GetControlToolTip(string controlName) 
    { 
     if (tooltips.ContainsKey(controlName)) 
     { 
      return tooltips[controlName]; 
     } 
     else 
     { 
      ToolTip tt = new ToolTip(); 
      tooltips.Add(controlName, tt); 
      return tt; 
     } 
    } 
} 

Cách sử dụng:

var tt = toolTips.GetControlToolTip("button1"); 
tt.SetToolTip(button1, "This is my button1 tooltip"); 
tt = toolTips.GetControlToolTip("button2"); 
tt.SetToolTip(button2, "This is my button2 tooltip"); 
5

tôi đổi mã Gavin Stevens của để làm cho nó tất cả tĩnh như vậy:

class ToolTipHelper 
{ 
    private static readonly Dictionary<string, ToolTip> tooltips = new Dictionary<string, ToolTip>(); 

    public static ToolTip GetControlToolTip(string controlName) 
    { 
     <same as above> 
    } 
} 

Bây giờ bạn không còn phải nhanh chóng một ToolTipHelper (do đó nó không có cần cho constructor), và do đó bạn có thể truy cập vào lớp này từ bất kỳ lớp nào như vậy:

ToolTip tt = ToolTipHelper.GetControlToolTip("button1"); 
tt.SetToolTip(button1, "This is my button1 tooltip"); 

Cũng hữu ích với cả hai phiên bản là bật và tắt chú giải công cụ, bạn chỉ có thể đặt tt.Active đúng hoặc sai.

chỉnh sửa

cải thiện hơn nữa về vấn đề này:

class ToolTipHelper 
{ 
    private static readonly Dictionary<string, ToolTip> tooltips = new Dictionary<string, ToolTip>(); 
    public static ToolTip GetControlToolTip(string controlName) 
    { 
     <same as above still> 
    } 
    public static ToolTip GetControlToolTip(Control control) 
    { 
     return GetControlToolTip(control.Name); 
    } 
    public static void SetToolTip(Control control, string text) 
    { 
     ToolTip tt = GetControlToolTip(control); 
     tt.SetToolTip(control, text); 
    } 
} 

Vì vậy, bây giờ, thiết lập một ToolTip từ bất cứ nơi nào trong chương trình chỉ là một dòng:

ToolTipHelper.SetToolTip(button1, "This is my button1 tooltip"); 

Nếu bạn don' t cần truy cập vào các chức năng cũ, bạn có thể kết hợp chúng và/hoặc đặt chúng ở chế độ riêng tư, do đó, SetToolTip() là chỉ có một bạn e.

+0

Tôi cho rằng Gavin Stevens xứng đáng nhận được tín dụng, nhưng tôi thích giải pháp tĩnh. Nếu không có quá nhiều chi tiết, tôi đã có một hình thức rất phức tạp với hàng trăm điều khiển có chú giải công cụ được gán cho họ trên mỗi lần gửi biểu mẫu và vì vậy bạn không bao giờ có thể giết những cái cũ. Giải pháp này đã cứu tôi khỏi đau đầu đáng kể. – 333Matt

+0

Có, tĩnh là tốt hơn! –

3

Để chỉ cần loại bỏ các tooltip từ điều khiển, bạn có thể sửa đổi các lớp như thế này:

public static void SetToolTip(Control control, string text) 
    { 
     if (String.IsNullOrEmpty(text)) 
     { 
      if (tooltips.ContainsKey(control.Name)) 
      { 
       GetControlToolTip(control).RemoveAll(); 
       tooltips.Remove(control.Name); 
      } 
     } 
     else 
     { 
      ToolTip tt = GetControlToolTip(control); 
      tt.SetToolTip(control, text); 
     } 
    } 

và sử dụng lệnh này:

ToolTipHelper.SetToolTip(control, "") 
0

Đối tượng tooltip làm việc trong nhiều Controls đồng thời gian.

Tạo một phiên bản của ToolTip và sử dụng nó để thêm và xóa chú giải công cụ của bất kỳ điều khiển nào.

Khi thêm bạn chỉ nên sử dụng .SetToolTip (Control, "Thông điệp mà sẽ apear khi di chuột") Khi tháo bạn chỉ cần đặt nó trở lại null với .SetToolTip (Control, null).

+0

Nếu bạn định trích dẫn nguồn, bạn nên chỉ định nguồn đó trong bài đăng của mình. – LarsTech

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