Hiển thị một chú giải công cụ qua một nút bằng Windows Forms


Câu trả lời:


222

ToolTip thực sự là một điều khiển WinForms xử lý hiển thị các mẹo công cụ cho nhiều thành phần trên một biểu mẫu.

Nói nút của bạn được gọi là MyButton.

  1. Thêm điều khiển ToolTip (bên dưới Điều khiển chung trong hộp công cụ Windows Forms) vào biểu mẫu của bạn.
  2. Đặt tên cho nó - nói MyToolTip
  3. Đặt thuộc tính "Tooltip trên MyToolTip" của MyButton (bên dưới Misc trong lưới thuộc tính nút) thành văn bản sẽ xuất hiện khi bạn di chuột qua nó.

Chú giải công cụ sẽ tự động xuất hiện khi con trỏ di chuyển qua nút, nhưng nếu bạn cần hiển thị nó theo chương trình, hãy gọi

MyToolTip.Show("Tooltip text goes here", MyButton)

trong mã của bạn để hiển thị tooltip và MyToolTip.Hide (MyButton) để làm cho nó biến mất một lần nữa.


hay, nhưng một câu hỏi: nếu tôi có nhiều hơn một nút trong một biểu mẫu, tôi cần thêm tooltip hoặc tôi có thể đặt nhiều mô tả và nút cho cùng một tooltip không?
ghiboz

8
Biểu mẫu của bạn chỉ cần một điều khiển ToolTip duy nhất - mỗi nút có thể có văn bản trợ giúp khác nhau (đây là lý do tại sao "Tooltip trên MyToolTip" là một thuộc tính của điều khiển được liên kết, không phải của chính điều khiển ToolTip)
Dylan Beattie

2
Trong trường hợp đơn giản nhất, thêm tooltip vào Form là điều tốt nhất để làm. Vấn đề: tại thời điểm thiết kế của Điều khiển tùy chỉnh, bạn không có tham chiếu đến Biểu mẫu gốc. Giải pháp: tạo một đối tượng tooltip trong Control. Đừng nghĩ về đối tượng ToolTip là nhất thiết phải được đính kèm với Biểu mẫu.
Stéphane Gourichon

93

Sử dụng trình thiết kế biểu mẫu:

  • Kéo điều khiển ToolTip từ Hộp công cụ, vào biểu mẫu.
  • Chọn các thuộc tính của điều khiển mà bạn muốn đầu công cụ xuất hiện.
  • Tìm thuộc tính 'ToolTip trên toolTip1' (tên có thể không phải là toolTip1 nếu bạn thay đổi tên mặc định của nó).
  • Đặt văn bản của thuộc tính thành văn bản mẹo của công cụ bạn muốn hiển thị.

Bạn cũng có thể thiết lập mẹo công cụ theo chương trình bằng cách sử dụng lệnh gọi sau:

this.toolTip1.SetToolTip(this.targetControl, "My Tool Tip");

45

Bạn có thể sử dụng lớp ToolTip:

Tạo một ToolTip cho một điều khiển

Thí dụ:

private void Form1_Load(object sender, System.EventArgs e)
{
    System.Windows.Forms.ToolTip ToolTip1 = new System.Windows.Forms.ToolTip();
    ToolTip1.SetToolTip(this.Button1, "Hello");
}

1
Đây là giải pháp hoàn hảo vì nó tích hợp trực tiếp với mã VS được tạo tự động. Cảm ơn :)
anon58192932

@DaveK Cảm ơn. Cách này tốt hơn bởi vì tôi có thể xác định tất cả các chú giải công cụ ở một nơi
fedeteka

Cảm ơn. Câu trả lời tốt nhất và đơn giản nhất cho câu hỏi này.
Najeeb

Thậm chí ngắn hơn:new ToolTip().SetToolTip(this.Button1, "Hello");
The_Black_Smurf

6

Đối với tooltip mặc định, điều này có thể được sử dụng -

System.Windows.Forms.ToolTip ToolTip1 = new System.Windows.Forms.ToolTip();
ToolTip1.SetToolTip(this.textBox1, "Hello world");

Một tooltip tùy chỉnh cũng có thể được sử dụng trong trường hợp nếu định dạng được yêu cầu cho thông báo tooltip. Điều này có thể được tạo bằng cách tùy chỉnh định dạng biểu mẫu và sử dụng nó làm hộp thoại chú giải công cụ trong sự kiện di chuột của điều khiển. Vui lòng kiểm tra liên kết sau để biết thêm chi tiết -

http://newapputil.blogspot.in/2015/08/create-custom-tooltip-dialog-from-form.html


5

Lười biếng và lưu trữ nhỏ gọn văn bản trong Tag tài sản

Nếu bạn hơi lười biếng và không sử dụng thuộc tính Tag của các điều khiển cho bất kỳ điều gì khác, bạn có thể sử dụng nó để lưu trữ văn bản chú giải công cụ và gán các trình xử lý sự kiện MouseHover cho tất cả các điều khiển như vậy trong một lần như sau:

    private System.Windows.Forms.ToolTip ToolTip1;
    private void PrepareTooltips()
    {
        ToolTip1 = new System.Windows.Forms.ToolTip();
        foreach(Control ctrl in this.Controls)
        {
            if (ctrl is Button && ctrl.Tag is string)
            {
                ctrl.MouseHover += new EventHandler(delegate(Object o, EventArgs a)
                {
                    var btn = (Control)o;
                    ToolTip1.SetToolTip(btn, btn.Tag.ToString());
                });
            }
        }
    }

Trong trường hợp này, tất cả các nút có một chuỗi trong thuộc tính Tag được gán một sự kiện MouseHover . Để giữ cho nó nhỏ gọn, sự kiện MouseHover được xác định nội tuyến bằng biểu thức lambda. Trong trường hợp bất kỳ nút nào được di chuột sẽ có văn bản Thẻ được gán cho Tooltip và hiển thị.


4

.NET framework cung cấp một lớp ToolTip. Thêm một trong số đó vào biểu mẫu của bạn và sau đó vào sự kiện MouseHover cho mỗi mục bạn muốn có một chú giải công cụ, hãy làm như sau:

    private void checkBox1_MouseHover(object sender, EventArgs e)
    {
        toolTip1.Show("text", checkBox1);
    }

4
private void Form1_Load(object sender, System.EventArgs e)
{
    ToolTip toolTip1 = new ToolTip();
    toolTip1.AutoPopDelay = 5000;
    toolTip1.InitialDelay = 1000;
    toolTip1.ReshowDelay = 500;
    toolTip1.ShowAlways = true;
    toolTip1.SetToolTip(this.button1, "My button1");
    toolTip1.SetToolTip(this.checkBox1, "My checkBox1");
}

4
Mặc dù đoạn mã này có thể giải quyết câu hỏi, bao gồm một lời giải thích thực sự giúp cải thiện chất lượng bài đăng của bạn. Hãy nhớ rằng bạn đang trả lời câu hỏi cho độc giả trong tương lai và những người đó có thể không biết lý do cho đề xuất mã của bạn.
secelite

0

Dựa trên câu trả lời của DaveK , tôi đã tạo tiện ích mở rộng kiểm soát:

public static void SetToolTip(this Control control, string txt)
{
    new ToolTip().SetToolTip(control, txt);
}

Sau đó, bạn có thể đặt chú giải công cụ cho bất kỳ điều khiển nào bằng một dòng duy nhất:

this.MyButton.SetToolTip("Hello world");

-4

Chắc chắn, chỉ cần xử lý sự kiện mousehover và nói với nó để hiển thị một mẹo công cụ. t là một chú giải công cụ được xác định hoặc trong toàn cục hoặc trong hàm tạo bằng cách sử dụng:

ToolTip t = new ToolTip();

sau đó xử lý sự kiện:

private void control_MouseHover(object sender, EventArgs e)
{
  t.Show("Text", (Control)sender);
}

2
Tôi nghĩ rằng bạn đã bỏ phiếu vì đó không phải là cách sử dụng các điều khiển ToolTip trong Windows Forms. Bạn chỉ cần một điều khiển như vậy trên biểu mẫu và nó hiển thị các mẹo cho tất cả các điều khiển. Xem mã trong các phản ứng khác.
Julian Melville

1
Tôi đoán lời giải thích không khớp với mã, trong phần giải thích tôi đã nói sẽ hiển thị nó và trong mã tôi cũng đã khởi tạo nó. Lỗi của tôi. : P
Fry

2
@ julianz Trên thực tế, điều này hoạt động tốt khi có các công cụ chuyên dụng có thể năng động nếu bạn muốn tùy thuộc vào trạng thái (tất nhiên trừ việc tạo - tha thứ cho tôi, tôi chỉ cố gắng khớp tất cả vào một khối.) Đối với các phản hồi khác trên một tĩnh mạch tương tự ... yshuditelu và Dylan Beattie giống nhau mặc dù không có sự khởi tạo.
Chiên
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.