Làm cách nào để thêm ToolTip vào điều khiển?


154

Tôi có một số điều khiển mà tôi muốn hiển thị ToolTipkhi chuột di chuột qua nó. Tôi có thể làm cái này như thế nào? Tôi muốn biết làm thế nào để làm điều này đúng trong mã, nhưng cũng trong trình thiết kế (Có một ToolTipthành phần trong hộp công cụ, nhưng tôi không hoàn toàn .. lấy nó).

Tôi sẽ không ngạc nhiên nếu đây là một bản sao, nhưng tôi chỉ có thể tìm thấy các câu hỏi về các tình huống cụ thể, nâng cao hơn. Tôi muốn biết những điều cơ bản.



Có liên quan và cũ hơn (áp dụng cho .NET nói chung): stackoverflow.com/questions/168550/ mẹo
Christopher Kyle Horton

Câu trả lời:


208

Đây là bài viết của bạn để làm điều đó với mã

private void Form1_Load(object sender, System.EventArgs e)
{
     // Create the ToolTip and associate with the Form container.
     ToolTip toolTip1 = new ToolTip();

     // Set up the delays for the ToolTip.
     toolTip1.AutoPopDelay = 5000;
     toolTip1.InitialDelay = 1000;
     toolTip1.ReshowDelay = 500;
     // Force the ToolTip text to be displayed whether or not the form is active.
     toolTip1.ShowAlways = true;

     // Set up the ToolTip text for the Button and Checkbox.
     toolTip1.SetToolTip(this.button1, "My button1");
     toolTip1.SetToolTip(this.checkBox1, "My checkBox1");
}

3
Vì vậy, tôi đoán nó không thành vấn đề nếu toolTip1biến rơi ra khỏi phạm vi?
Svish

1
Điều gì về một tĩnh ToolTipcho tất cả các hình thức của bạn?
Svish

7
Nó sẽ được giải phóng một khi nó trở nên không được kiểm chứng, điều đó sẽ không xảy ra, vì nút và hộp kiểm vẫn sẽ tham chiếu nó
Rowland Shaw

2
Họ đang tham chiếu nó bởi vì "SetToolTip" thêm EventHandlers vào nút và các sự kiện của hộp kiểm
Eduardo Wada

3
Tôi nghĩ rằng đó là một ý tưởng tồi để đặt tooltip vào một biến tĩnh. Điều gì nếu một Mẫu được đóng và mở lại? SetTooltip sẽ hoạt động trở lại? Và nếu vậy, các trình xử lý của biểu mẫu đóng sẽ ở lại trong bộ nhớ hoặc loại bỏ một cách chính xác? Tôi thậm chí sẽ không dành một phút để thử nghiệm điều đó. Sử dụng một biến thể thành viên thay thế - đó là bằng chứng đạn!
Elmue

138

Kéo điều khiển chú giải công cụ từ hộp công cụ vào biểu mẫu của bạn. Bạn không thực sự cần phải cung cấp cho nó bất kỳ thuộc tính nào ngoài tên. Sau đó, trong các thuộc tính của điều khiển mà bạn muốn có một chú giải công cụ, hãy tìm một thuộc tính mới với tên của điều khiển chú giải công cụ bạn vừa thêm. Theo mặc định, nó sẽ cung cấp cho bạn một chú giải công cụ khi con trỏ di chuyển điều khiển.


54
Đảm bảo rằng khi bạn thực hiện việc này (như lúc 2 giờ sáng), bạn sử dụng điều khiển ToolTip chứ không phải điều khiển ToolStrip.
Adrian K

2
Với câu trả lời này, việc chỉ thêm một tooltip duy nhất vào winform sẽ cung cấp cho tất cả các điều khiển dưới dạng tooltip của riêng chúng.
SAm 14/2/2016

Mạnh mẽ trong sự đơn giản của nó, chỉ cần đảm bảo bạn thả nó vào đúng điều khiển chứ không phải bên cạnh nó (như lúc 2 giờ sáng).
Michael Promotionson

40
  1. Thêm một thành phần ToolTip vào biểu mẫu của bạn
  2. Chọn một trong các điều khiển mà bạn muốn có một mẹo công cụ cho
  3. Mở lưới thuộc tính ( F4), trong danh sách, bạn sẽ tìm thấy một thuộc tính có tên "ToolTip trên toolTip1" (hoặc một cái gì đó tương tự). Đặt văn bản chú giải công cụ mong muốn trên thuộc tính đó.
  4. Lặp lại 2-3 cho các điều khiển khác
  5. Làm xong.

Thủ thuật ở đây là điều khiển ToolTip là điều khiển mở rộng , có nghĩa là nó sẽ mở rộng tập các thuộc tính cho các điều khiển khác trên biểu mẫu. Đằng sau hậu trường, điều này đạt được bằng cách tạo mã như trong câu trả lời của Svetlozar. Có các điều khiển khác hoạt động theo cách tương tự (chẳng hạn như HelpProvider).


1
Vì vậy, bạn có thể sử dụng cùng một ToolTip cho nhiều điều khiển với các văn bản khác nhau?
Svish

@Svish: vâng, đó là mục đích của điều khiển mở rộng.
Fredrik Mörk

Nó có thể được sử dụng chéo người dùng và các hình thức quá không? Giống như nếu bạn đã tạo một ToolTip tĩnh với các giá trị thuộc tính tiêu chuẩn của bạn. Hay đó sẽ được coi là thực hành xấu?
Svish

Tôi chưa bao giờ thử nó và tôi hoàn toàn không biết hoạt động bên trong của ToolTip, nhưng vì nó có liên quan đến sự kiểm soát mà một văn bản có liên quan nên tôi đoán nó có thể hoạt động. Chỉ có một cách để tìm hiểu; hãy thử: o)
Fredrik Mörk

Vâng, tôi rõ ràng sẽ thử nó. Nhưng tôi không đặc biệt giỏi trong việc tìm kiếm những thứ như rò rỉ bộ nhớ và như vậy ... Và nếu nó sẽ gây rò rỉ bộ nhớ hoặc bất cứ điều gì tương tự tôi muốn biết, hehe.
Svish

8

ToolTip trong C # rất dễ dàng để thêm vào hầu hết các điều khiển UI. Bạn không cần thêm bất kỳ sự kiện MouseHover nào cho việc này.

Đây là cách để làm điều đó-

  1. Thêm một đối tượng ToolTip vào biểu mẫu của bạn. Một đối tượng là đủ cho toàn bộ hình thức. ToolTip toolTip = new ToolTip();

  2. Thêm điều khiển vào tooltip với văn bản mong muốn.

    toolTip.SetToolTip(Button1,"Click here");


1

Tôi đã làm theo cách này: Chỉ cần thêm sự kiện vào bất kỳ điều khiển nào, đặt thẻ của điều khiển và thêm điều kiện để xử lý chú giải công cụ cho điều khiển / thẻ thích hợp.

private void Info_MouseHover(object sender, EventArgs e)
{
    Control senderObject = sender as Control;
    string hoveredControl = senderObject.Tag.ToString();

    // only instantiate a tooltip if the control's tag contains data
    if (hoveredControl != "")
    {
        ToolTip info = new ToolTip
        {
            AutomaticDelay = 500
        };

        string tooltipMessage = string.Empty;

        // add all conditionals here to modify message based on the tag 
        // of the hovered control
        if (hoveredControl == "save button")
        {
            tooltipMessage = "This button will save stuff.";
        }

        info.SetToolTip(senderObject, tooltipMessage);
    }
}

-3

Chỉ cần đăng ký sự kiện ToolTipTextNeeded của điều khiển và trả về e.TooltipText, đơn giản hơn nhiều.


6
Tôi không nghĩ đó là một sự kiện kiểm soát WinForm tiêu chuẩn.
Dan7
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.