代码之家  ›  专栏  ›  技术社区  ›  second

c#使ShowItemToolTips具有粘性

  •  2
  • second  · 技术社区  · 16 年前

    3 回复  |  直到 16 年前
        1
  •  7
  •   Grammarian    16 年前

    你知道,当然,下面。NET ListView类是一个Windows列表视图控件。此列表视图控件使用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);
    }
    

    一旦你有了工具提示控件的句柄,你就可以向它发送消息。

    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);
       }
    }
    

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

        2
  •  2
  •   Brent Matzelle    14 年前

    有一种纯净。NET代码替代user32.dll P/Invoke调用。创建一个 ToolTip 控制并设置所有延迟属性。然后使用ListView MouseMove 事件,根据当前选择的列表视图控件切换工具提示文本。

        ToolTip toolTip = new ToolTip();
        toolTip.AutoPopDelay = 7000;
        toolTip.InitialDelay = 450;
        toolTip.ReshowDelay = 450;
    
        listView.MouseMove += new MouseEventHandler(listView_MouseMove);
    

    我在下面给出了两个选项。选项#1将工具提示文本设置为子项的text属性。选项#2将工具提示设置为父ListViewItem的ToolTipText属性。

        void  listView_MouseMove(object sender, MouseEventArgs e)
        {
            ListViewItem item = listView.GetItemAt(e.X, e.Y);
            ListViewHitTestInfo info = listView.HitTest(e.X, e.Y);
    
            if ((item != null) && (info.SubItem != null))
            {
                // Option #1 - Set it to the sub-item text
                // toolTip.SetToolTip(listView, info.SubItem.Text);
    
                // Option #2 - Sets it to the tool tip text of the sub-item
                toolTip.SetToolTip(listView, info.Item.ToolTipText);
            }
            else
            {
                toolTip.SetToolTip(listView, null);
            }
        }
    
        3
  •  0
  •   Malcolm Post    16 年前

    查看工具提示类。AutoPopupDelay方法允许您设置工具提示保持可见的时间长度。