Подсказки для элементов CheckedListBox?

Есть ли способ, чтобы добавить дополнительный текст в всплывающую подсказку, когда пользовательская мышь удерживается над элементом в CheckedListBox?

То, что я ожидал, сможет сделать в коде:

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

Может ли кто-нибудь указать мне в правильном направлении? Я уже нашел пару статей, которые включают в себя определение того, какой элемент мыши находится в данный момент, и создание нового экземпляра всплывающей подсказки, но это звучит слишком изобретательно, чтобы быть лучшим способом.

Спасибо заранее.

Ответ 1

Добавить объект подсказки в вашу форму, а затем добавить обработчик событий для CheckedListBox.MouseHover, который вызывает метод ShowToolTip(); Добавьте событие MouseMove вашего CheckedListBox, которое имеет следующий код:

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

        }
    }

Ответ 2

В качестве альтернативы вы можете вместо этого использовать ListView с флажками. Этот элемент управления встроенная поддержка всплывающих подсказок.

Ответ 3

Проститутки или нет; что то, что есть...

Я не знаю более простого способа, чем вы уже описали (хотя я бы, вероятно, повторно использовал экземпляр всплывающей подсказки, а не создавал все время). Если у вас есть статьи, которые показывают это, то используйте их - или используйте сторонний элемент управления, который поддерживает это изначально (никто не замечает).

Ответ 4

Я хотел бы расширить ответ Фермин, чтобы, возможно, сделать его замечательное решение немного более ясным.

В том виде, в котором вы работаете (вероятно, в файле .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());
        }
    }
}

Ответ 5

Запустите ListItems в своем списке элементов и установите соответствующий текст в качестве атрибута "title" элемента, и он будет отображаться при наведении...

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