如何在WinForms中增加ListView项的AutoPopDelay值?

问题描述 投票:1回答:3

你知道ListView中的每个项目都有ToolTipText属性,这就是全部!没有像AutoPopDelay这样的属性来设置其显示时间...始终是默认值,5000毫秒。我试图将ToolTip与每个项目联系起来,但这似乎是不可能的。

反正有没有增加ToolTipTextListViewItem财产的显示时间?

c# .net winforms listview tooltip
3个回答
1
投票

MouseHover每个控件触发一次 - 所以当你移动到不同的项目时永远不会更新。

使用ListView.ItemMouseHover来完成您的需要。

void listView1_ItemMouseHover(object sender, ListViewItemMouseHoverEventArgs e)
{
    this.toolTip1.SetToolTip(e.Item.ListView, e.Item.ToolTipText);
}

0
投票

致汉斯帕斯特。

我在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;
    }

但它表现得很奇怪。实际上,ToolTip的文本总是过时的。


0
投票

你可以使用ToolTip获得ListViewLVM_GETTOOLTIPS,然后将TTM_SETDELAYTIME消息发送到工具提示并通过将TTDT_AUTOPOP作为wparam和毫秒作为lparam的延迟来设置其延迟。

还要确保ShowItemsToolTipListView属性已设置为true且项目有工具提示。

[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*/);
}

要设置初始延迟或reshow延迟,请为wparam设置以下值:

const int TTDT_AUTOMATIC = 0;
const int TTDT_AUTOPOP = 2;
const int TTDT_INITIAL = 3;
© www.soinside.com 2019 - 2024. All rights reserved.