【发布时间】:2015-11-27 14:12:12
【问题描述】:
我创建了ListView 并添加了两个带有长文本的项目。
当我选择第一项时,第二项的文本被剪切,例如“MyIte....”。
所以当在这个项目下移动鼠标指针时,我会看到带有所有文本的工具提示。
如何禁用此工具提示?
设置属性ListView.ShowItemToolTips = false 没有帮助。
【问题讨论】:
标签: c# .net winforms listview tooltip
我创建了ListView 并添加了两个带有长文本的项目。
当我选择第一项时,第二项的文本被剪切,例如“MyIte....”。
所以当在这个项目下移动鼠标指针时,我会看到带有所有文本的工具提示。
如何禁用此工具提示?
设置属性ListView.ShowItemToolTips = false 没有帮助。
【问题讨论】:
标签: c# .net winforms listview tooltip
ListView 在收到带有TTN_NEEDTEXT lparam 的WM_Notify 消息时显示项目工具提示。因此,要禁用工具提示,您可以处理 ListView 消息,如果控件收到该消息,则忽略它。
您可以继承您的 ListView 并覆盖 WndProc,但作为另一种选择,您可以注册一个 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);
}
}
用法
要禁用 ListView 的工具提示,您可以简单地创建上述类的实例:
ListViewToolTipHelper helper;
helper = new ListViewToolTipHelper(this.listView1);
再次启用工具提示:
helper.TooltipEnabled = true;
另一种解决方法
您可以使用此解决方法禁用ListView 的工具提示,但副作用是表单中的所有其他工具提示也将通过这种方式禁用。
ToolTip toolTip = new ToolTip();
toolTip.SetToolTip(this.listView1, "dummy text");
toolTip.Active = false;
【讨论】: