WinForm里面的ListBox控件存在这样一个问题,当项文本长度超过控件宽度时,超出部分的文本直接被截掉,也不会出现提示信息,真是一大不幸!!
幸运的是让我看到这篇C++重写的带Tooltip的ListBox,所以造就了C#版的TipListBox
class TipListBox : ListBox
{
ToolTip tip;
public TipListBox()
{
tip = new ToolTip();
}
private void SetTipMessage(string strTip)
{
tip.SetToolTip(this, strTip);
}
/// <summary>
/// 重写鼠标移动事件
/// </summary>
/// <param name="e"></param>
protected override void OnMouseMove(MouseEventArgs e)
{
base.OnMouseMove(e);
int idx = IndexFromPoint(e.Location);// 获取鼠标所在的项索引
if (idx == -1) //鼠标所在位置没有 项
{
SetTipMessage(""); //设置提示信息为空
return;
}
string txt = GetItemText(this.Items[idx]); //获取项文本
SetTipMessage(txt); //设置提示信息
}
}