2009-04-29 53 views
11

Có cách nào ngắn gọn để đặt văn bản bổ sung xuất hiện trong chú giải công cụ khi chuột của người dùng được giữ trên một mục trong hộp kiểm tra không?Chú giải công cụ cho các mục CheckedListBox?

Những gì tôi sẽ mong đợi để có thể làm trong mã là:

uiChkLstTables.DisplayOnHoverMember = "DisplayOnHoverProperty"; //Property contains extended details 

bất cứ ai có thể chỉ cho tôi đi đúng hướng để làm điều này? Tôi đã tìm thấy một vài bài viết liên quan đến việc phát hiện mục nào của con chuột hiện tại và tạo ra một thể hiện tooltip mới, nhưng điều này nghe có vẻ hơi khó để trở thành cách tốt nhất.

Xin cảm ơn trước.

Trả lời

12

Thêm đối tượng Tooltip vào biểu mẫu của bạn và sau đó thêm trình xử lý sự kiện cho CheckedListBox.MouseHover gọi phương thức ShowToolTip(); Thêm sự kiện MouseMove của CheckedListBox của bạn trong đó có đoạn mã sau:

//Make ttIndex a global integer variable to store index of item currently showing tooltip. 
//Check if current location is different from item having tooltip, if so call method 
if (ttIndex != checkedListBox1.IndexFromPoint(e.Location)) 
       ShowToolTip(); 

Sau đó, tạo ra các phương pháp ShowToolTip:

private void ShowToolTip() 
    { 
     ttIndex = checkedListBox1.IndexFromPoint(checkedListBox1.PointToClient(MousePosition)); 
     if (ttIndex > -1) 
     { 
      Point p = PointToClient(MousePosition); 
      toolTip1.ToolTipTitle = "Tooltip Title"; 
      toolTip1.SetToolTip(checkedListBox1, checkedListBox1.Items[ttIndex].ToString()); 

     } 
    } 
+1

chú ý, lệnh ' Điểm p' là không cần thiết – Maslow

0

Bị truy tố hay không; đó là những gì có ...

Tôi không biết một cách dễ dàng hơn bạn đã mô tả (mặc dù tôi có thể tái sử dụng một ví dụ tooltip, thay vì tạo mới tất cả thời gian). Nếu bạn có các bài viết hiển thị điều này, thì hãy sử dụng chúng - hoặc sử dụng một điều khiển bên thứ 3 hỗ trợ điều này nguyên bản (không có bước nhảy vọt nào trong tâm trí).

5

Cách khác, bạn có thể sử dụng một ListView với hộp kiểm để thay thế. Điều khiển này có builtin hỗ trợ cho chú giải công cụ.

+0

Cảm ơn gợi ý, đã không nhìn thấy điều đó. –

+0

Điều gây phiền nhiễu là ListView không hỗ trợ ràng buộc dữ liệu (hoặc tôi thiếu cái gì?) –

0

Tôi muốn mở rộng câu trả lời của Fermin để có thể làm cho giải pháp tuyệt vời của mình hơi rõ ràng hơn.

Trong biểu mẫu mà bạn đang làm việc (có khả năng trong tệp .Designer.cs), bạn cần thêm trình xử lý sự kiện MouseMove vào hộp kiểm CheckedListBox của bạn (Fermin ban đầu đề xuất trình xử lý sự kiện MouseHover, nhưng điều này không có tác dụng tôi).

this.checkedListBox.MouseMove += new System.Windows.Forms.MouseEventHandler(this.showCheckBoxToolTip); 

Tiếp theo, thêm hai thuộc tính lớp mẫu của bạn, một đối tượng ToolTip và một số nguyên để theo dõi các hộp kiểm cuối cùng có mũi công cụ được hiển thị

private ToolTip toolTip1; 
private int toolTipIndex; 

Cuối cùng, bạn cần phải thực hiện các showCheckBoxToolTip() phương pháp. Phương thức này rất giống với câu trả lời của Fermin, ngoại trừ việc tôi kết hợp phương thức gọi lại sự kiện với phương thức ShowToolTip(). Ngoài ra, lưu ý rằng một trong các tham số phương thức là một MouseEventArgs. Điều này là do thuộc tính MouseMove yêu cầu một MouseEventHandler, sau đó cung cấp MouseEventArgs.

private void showCheckBoxToolTip(object sender, MouseEventArgs e) 
{ 
    if (toolTipIndex != this.checkedListBox.IndexFromPoint(e.Location)) 
    { 
     toolTipIndex = checkedListBox.IndexFromPoint(checkedListBox.PointToClient(MousePosition)); 
     if (toolTipIndex > -1) 
     { 
      toolTip1.SetToolTip(checkedListBox, checkedListBox.Items[toolTipIndex].ToString()); 
     } 
    } 
} 
0

Chạy qua ListItems bạn trong danh sách hộp kiểm lại các mặt hàng và thiết lập các văn bản thích hợp như mục 'tiêu đề' thuộc tính, và nó sẽ hiển thị trên di chuột ...

foreach (ListItem item in checkBoxList.Items) 
       { 
        //Find your item here...maybe a switch statement or 
        //a bunch of if()'s 
        if(item.Value.ToString() == "item 1") 
        { 
         item.Attributes["title"] = "This tooltip will display when I hover over item 1 now, thats it!!!"; 
        } 
        if(item.Value.ToString() == "item 2") 
        { 
         item.Attributes["title"] = "This tooltip will display when I hover over item 2 now, thats it!!!"; 
        } 
       } 
Các vấn đề liên quan