c#make ShowItemToolTips发粘

sec*_*ond 2 c# listview

我有一个ListView,其中有几个项目的文本多于列宽度.ShowItemToolTips意味着我可以将鼠标悬停在列上并查看完整的文本.

然而,对于很长的文本,它会在有时间阅读所有内容之前消失,所以我想让它保持更长时间(或者可能直到手动解散,例如通过移开鼠标或点击.我该怎么做?

Gra*_*ian 7

当然,您知道.NET ListView类下面是Windows列表视图控件.此listview控件使用Windows工具提示控件来显示截断的字符串.

您可以通过LVM_GETTOOLTIPS消息获取此基础工具提示控件.

[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr SendMessage(IntPtr hWnd, int msg, 
                                        int wParam, int lParam);

public IntPtr GetTooltipControl(ListView lv) {
    const int LVM_GETTOOLTIPS = 0x1000 + 78;
    return SendMessage(lv.handle, LVM_GETTOOLTIPS, 0, 0);
}
Run Code Online (Sandbox Code Playgroud)

获得工具提示控件的句柄后,您可以向其发送消息.

public void SetTooltipDelay(ListView lv, int showTime) {
   const int TTM_SETDELAYTIME = 0x400 + 3;
   const int TTDT_AUTOPOP = 2;

   IntPtr tooltip = this.GetTooltipControl(lv);
   if (tooltip != IntPtr.Zero) {
      SendMessage(tooltip, TTM_SETDELAYTIME, TTDT_AUTOPOP, showTime);
   }
}
Run Code Online (Sandbox Code Playgroud)

showTime是您希望控件保持可见的毫秒数.