Всплывающие подсказки для элементов с отмеченными списками?

StackOverflow https://stackoverflow.com/questions/802213

Вопрос

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

Что бы я хотел ожидать уметь делать в коде это:

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

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

Заранее благодарю.

Это было полезно?

Решение

Добавьте объект всплывающей подсказки в свою форму, а затем добавьте обработчик события для 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());

        }
    }

Другие советы

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

Надуманный или нет;это то, что есть...

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

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

В форме, в которой вы работаете (вероятно, в файле .Designer.cs), вам нужно добавить обработчик события MouseMove в ваш CheckedListBox (изначально Фермин предлагал обработчик события MouseHover, но у меня это не сработало).

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

Затем добавьте в свою форму два атрибута класса, объект всплывающей подсказки и целое число, чтобы отслеживать последний флажок, всплывающая подсказка которого была показана

private ToolTip toolTip1;
private int toolTipIndex;

Наконец, вам необходимо реализовать метод showCheckBoxToolTip().Этот метод очень похож на ответ Фермина, за исключением того, что я объединил метод обратного вызова события с методом 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());
        }
    }
}

Просмотрите свои 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!!!";
                    }
                }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top