c#:在子项目上显示工具提示

Tha*_*lia 4 c# listview tooltip winforms subitem

我有一个列表视图,在其中一列(不是第一列)中我想显示错误代码.

我无法做的是显示工具提示.我有

this.lstList.ShowItemToolTips = true;
...
ListViewItem value = lstList.Items.Add(name, name, 0);
...
if (lstList.Columns.Contains(lstColErrorCode))
{                                
  value.SubItems.Add(new ListViewItem.ListViewSubItem(value, errorCode.ToString()));
  value.ToolTipText = errorCode.ToString("X");
}
Run Code Online (Sandbox Code Playgroud)

我想获得代码的十六进制值,以显示在十进制值上方的工具提示中,但它显示在名称上方.

我无法得到任何我尝试过的东西(比如试图获得子项的坐标).我将不胜感激任何建议.

S3d*_*di9 5

这段代码适合我

ToolTip toolTip1 = new ToolTip();

void initMethod()
{
    lstList.MouseMove += new MouseEventHandler(lstList_MouseMove);//mousemove handler
    this.lstList.ShowItemToolTips = true;            
    toolTip1.SetToolTip(lstList,"");// init the tooltip
    ...
    ListViewItem value = lstList.Items.Add(name, name, 0);
    ...
    if (lstList.Columns.Contains(lstColErrorCode))
    {                                
        ListViewItem.ListViewSubItem lvs =  value.SubItems.Add(new ListViewItem.ListViewSubItem(value, errorCode.ToString()));
        lvs.Tag = "mydecimal"; // only the decimal subitem will be tooltiped
    }
}
Run Code Online (Sandbox Code Playgroud)

列表视图中的mousemove事件:

void lstList_MouseMove(object sender, MouseEventArgs e)
{
    ListViewItem item = lstList.GetItemAt(e.X, e.Y);
    ListViewHitTestInfo info = lstList.HitTest(e.X, e.Y);

    if ((item != null) && (info.SubItem != null) && (info.SubItem.Tag!=null) && (info.SubItem.Tag.ToString() == "mydecimal"))
    {
        toolTip1.SetToolTip(lstList,((decimal)info.SubItem.Text).ToString("X"));
    }
    else
    {
        toolTip1.SetToolTip(lstList, "");
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,我无法让它工作 - 不仅工具提示不会按我想要的方式显示(即使是简单的 toolTip1.SetToolTip(lstList, "hello"); 也不会工作),但我得到了除名字。然而 MouseMove 可以工作 - 我必须为名称对象的 info.SubItem.Tag 添加一个额外的 null 检查,因为它在鼠标触摸时给出异常...基于 VS 的 listview 有什么特别之处吗版本也许? (2认同)