Подсказки для элементов CheckedListBox? - PullRequest
14 голосов
/ 29 апреля 2009

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

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

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

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

Заранее спасибо.

Ответы [ 5 ]

16 голосов
/ 29 апреля 2009

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

        }
    }
6 голосов
/ 29 апреля 2009

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

0 голосов
/ 06 февраля 2016

Выполните ваши 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!!!";
                    }
                }
0 голосов
/ 22 марта 2015

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

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

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

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

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());
        }
    }
}
0 голосов
/ 29 апреля 2009

Придумано или нет; это то, что есть ...

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

...