CheckedListBox项目的工具提示?

时间:2009-04-29 12:48:41

标签: c# winforms user-interface tooltip checkedlistbox

当用户的鼠标放在CheckedListBox中的某个项目上时,是否有一种直接的方法来设置其他文本出现在工具提示中?

期望能够在代码中执行的操作是:

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

有人能指出我正确的方向吗?我已经找到了一些文章,涉及检测鼠标当前所在的项目并创建一个新的工具提示实例,但这听起来有点过于人为,不是最好的方法。

提前致谢。

5 个答案:

答案 0 :(得分:16)

向表单添加一个Tooltip对象,然后为CheckedListBox.MouseHover添加一个调用方法ShowToolTip()的事件处理程序; 添加CheckedListBox的MouseMove事件,其中包含以下代码:

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

然后创建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 :(得分:6)

或者,您可以使用带有复选框的ListView代替。这个控件有 内置支持工具提示

答案 2 :(得分:0)

是否存在;这就是......

我不知道比你已经描述过的更简单的方法(尽管我可能会重新使用工具提示实例,而不是一直创建新工具)。如果您有展示此内容的文章,请使用它们 - 或者使用支持本机的第三方控件(没有任何想法)。

答案 3 :(得分:0)

我想扩展Fermin的答案,以便让他的精彩解决方案更加清晰。

在您正在使用的表单中(可能在.Designer.cs文件中),您需要将一个MouseMove事件处理程序添加到CheckedListBox(Fermin最初建议使用MouseHover事件处理程序,但这不起作用对我来说。)

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

接下来,向表单添加两个类属性,一个ToolTip对象和一个整数,以跟踪显示工具提示的最后一个复选框

private ToolTip toolTip1;
private int toolTipIndex;

最后,您需要实现showCheckBoxToolTip()方法。这个方法与Fermin的答案非常相似,只不过我将事件回调方法与ShowToolTip()方法结合起来。另请注意,其中一个方法参数是MouseEventArgs。这是因为MouseMove属性需要MouseEventHandler,然后提供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());
        }
    }
}

答案 4 :(得分:0)

在您的复选框项目列表中运行您的ListItems,并将相应的文本设置为项目标题'属性,它将显示在悬停...

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!!!";
                    }
                }