Tooltips for CheckedListBox items?
Asked Answered
R

5

20

Is there a straighforward way to set additional text to appear in a tooltip when a user's mouse is held over an item in a CheckedListBox?

What I would expect to be able to do in code is:

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

Can anyone point me in the right direction to do this? I've already found a couple of articles that involve detecting which item the mouse is currently over and creating a new tooltip instance, but this sounds a little too contrived to be the best way.

Thanks in advance.

Revis answered 29/4, 2009 at 12:48 Comment(0)
M
21

Add a Tooltip object to your form and then add an event handler for the CheckedListBox.MouseHover that calls a method ShowToolTip(); Add MouseMove event of your CheckedListBox which has the following code:

//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();

Then create the ShowToolTip method:

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());

        }
    }
Michelinamicheline answered 29/4, 2009 at 13:10 Comment(1)
of note, the Point p line is not necessaryObbligato
E
6

Alternately, you could use a ListView with checkboxes instead. This control has builtin support for tooltips.

Embassy answered 29/4, 2009 at 13:15 Comment(2)
Thanks for the suggestion, hadn't seen that.Revis
The annoying thing is that ListView doesn't support data binding (or am I missing something?)Labret
P
1

I would like to expand upon Fermin's answer in order to perhaps make his wonderful solution slightly more clear.

In the form that you're working in (likely in the .Designer.cs file), you need to add a MouseMove event handler to your CheckedListBox (Fermin originally suggested a MouseHover event handler, but this did not work for me).

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

Next, add two class attributes to your form, a ToolTip object and an integer to keep track of the last checkbox whose tool tip was shown

private ToolTip toolTip1;
private int toolTipIndex;

Finally, you need to implement the showCheckBoxToolTip() method. This method is very similar to Fermin's answer, except that I combined the event callback method with the ShowToolTip() method. Also, notice that one of the method parameters is a MouseEventArgs. This is because the MouseMove attribute requires a MouseEventHandler, which then supplies 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());
        }
    }
}
Proximal answered 22/3, 2015 at 20:58 Comment(0)
C
1

Run through your ListItems in your checkbox list of items and set the appropriate text as the item 'title' attribute, and it will display on hover...

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!!!";
                    }
                }
Carma answered 6/2, 2016 at 0:29 Comment(0)
S
0

Contrived or not; that's what there is...

I'm not aware of an easier way than you have already described (although I'd probably re-use a tooltip instance, rather than creating new all the time). If you have articles that show this, then use them - or use a 3rd party control that supports this natively (none leap to mind).

Sommelier answered 29/4, 2009 at 13:0 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.