您知道ListView
中的每件商品都有ToolTipText
属性,而这就是全部!没有像AutoPopDelay
这样的属性来设置其显示时间...始终是默认值,5000毫秒。我试图将ToolTip
关联到每个项目,但似乎不可能。
无论如何都要增加ToolTipText
的{{1}}属性的显示时间吗?
答案 0 :(得分:1)
每个控件都会触发一次鼠标悬停 - 所以在移动到不同的项目时永远不会更新。
使用ListView.Item Mouseover来完成您的需要。
void listView1_ItemMouseHover(object sender, ListViewItemMouseHoverEventArgs e)
{
this.toolTip1.SetToolTip(e.Item.ListView, e.Item.ToolTipText);
}
答案 1 :(得分:0)
致Hans Passant。
我在MouseHover事件中使用了这段代码:
Point pntOnList = lsvSource.PointToClient
(new Point(Cursor.Position.X, Cursor.Position.Y));
ListViewItem lsviUnderMouse =
lsvSource.GetItemAt(pntOnList.X, pntOnList.Y);
if (lsviUnderMouse != null)
{
ttipDetails.SetToolTip(lsvSource, lsviUnderMouse.ToolTipText);
ttipDetails.Active = true;
}
else
{
ttipDetails.Active = false;
}
但它表现得很奇怪。实际上,工具提示的文本总是过时的。
答案 2 :(得分:0)
您可以使用LVM_GETTOOLTIPS
获取ToolTip
中的ListView
,然后向工具提示发送TTM_SETDELAYTIME
消息,并通过将TTDT_AUTOPOP
传递为wparam,延迟时间为lparam。
还要确保将ShowItemsToolTip
的{{1}}属性设置为true,并且这些项目具有工具提示。
ListView
要设置初始延迟或重新显示延迟,请为wparam设置以下值:
[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern IntPtr SendMessage(IntPtr hWnd, int msg, int wParam, int lParam);
const int LVM_GETTOOLTIPS = 0x104E;
const int TTM_SETDELAYTIME = 0x403;
const int TTDT_AUTOPOP = 2;
private void button1_Click(object sender, EventArgs e)
{
var tooltip = SendMessage(listView1.Handle, LVM_GETTOOLTIPS, 0, 0);
SendMessage(tooltip, TTM_SETDELAYTIME, TTDT_AUTOPOP, 10000 /*milliseconds*/);
}