禁用WinForms ListViewItem Tooltip用于长文本

时间:2015-11-27 14:12:13

标签: c# .net winforms listview tooltip

我创建了ListView并添加了两个带有长文本的项目。 当我选择第一个项目时,第二个项目的文本被剪裁,例如" MyIte ...."。

因此,当在此项目下移动鼠标指针时,我会看到包含所有文本的工具提示。

如何禁用此工具提示?

设置属性ListView.ShowItemToolTips = false没有帮助。

1 个答案:

答案 0 :(得分:2)

class Undergraduate(Student): #Initializer def __init__(self, first_name='', last_name='', phone_number='', address=None, social_sec_num='', emailAddress='', major=0, desc='', gpa=0.0, level=''): super().__init__(first_name, last_name, phone_number, address, social_sec_num, emailAddress, major, desc, gpa) self.__level = level #Mutator def setLevel(self, level): if (self.__level == "Freshman" or self.__level == "Sophomore" or self.__level == "Junior" or self.__level == "Senior"): self.__level = level else: raise ValueError("Level must be Freshman, Sophomore, Junior, or Senior") #Accessor def getLevel(self): return self.__level #String Representation def __str__(self): undergraduate_string = \ "First Name: %s" %self.getFirstName() + "\n" +\ "Last Name: %s" %self.getLastName() + "\n" +\ "Phone Number: %s" %self.getPhoneNumber() + "\n" +\ "Address: %s" %self.getAddress() + "\n" +\ "Social Security Number: %s" %self.getSocialSecNum() + "\n" +\ "Email Address: %s" %self.getEmailAddress() + "\n" +\ "Major: %d" %self.getMajor() + "\n" +\ "Description: %s" %self.getDesc() + "\n" +\ "GPA: %.2f" %self.getGpa() + "\n" +\ "Level: %s" %self.getLevel() return undergraduate_string 在收到带有ListView lparam的WM_Notify邮件时会显示商品工具提示。因此,要禁用工具提示,您可以处理TTN_NEEDTEXT消息,如果控件收到该消息,则忽略它。

您可以继承ListView并覆盖ListView,但作为另一种选择,您可以注册WndProc以接收ListView消息,这样您就可以过滤消息。

<强>实施

NativeWindow

<强>用法

要禁用ListView的工具提示,您只需创建上述类的实例:

public class ListViewToolTipHelper : NativeWindow
{
    private ListView parentListView;
    private const int WM_NOTIFY = 78;
    private const int TTN_FIRST = -520;
    private const int TTN_NEEDTEXT = (TTN_FIRST - 10);
    public struct NMHDR
    {
        public IntPtr hwndFrom;
        public IntPtr idFrom;
        public Int32 code;
    }
    public bool TooltipEnabled { get; set; }
    protected override void WndProc(ref Message m)
    {
        if (m.Msg == WM_NOTIFY && !TooltipEnabled)
        {
            var nmHdr = (NMHDR) m.GetLParam(typeof(NMHDR));
            if (nmHdr.code == TTN_NEEDTEXT)
                return;
        }

        base.WndProc(ref m);
    }
    public ListViewToolTipHelper(ListView listView)
    {
        this.parentListView = listView;
        this.AssignHandle(listView.Handle);
    }
}

再次启用工具提示:

ListViewToolTipHelper helper;
helper = new ListViewToolTipHelper(this.listView1);

另一种解决方法

您可以使用此解决方法禁用helper.TooltipEnabled = true; 的工具提示,但副作用是表单中的所有其他工具提示也将以此方式禁用。

ListView