Подсказки для элементов 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!!!";
}
}