ListView列是否具有可显示的最大长度?

时间:2011-07-14 15:18:01

标签: c# listview .net-4.0 listviewitem

我遇到了一个奇怪的ListView问题,并会尽力解释它。我有一个包含4列的ListView,最后一列是不同长度的消息字符串。我有一些功能可以将ListView项目更改为红色,如果它包含某些关键字(失败,异常,等等)。

我首先注意到这个问题,当一个项目是红色时,我没有在列中看到任何会触发红色着色代码的单词。因此,我将传入字符串的长度添加到项目之前,并添加了一个文本框,该文本框将在选中时显示该列的文本。我发现前置长度(传入字符串的实际长度)将是953,提取的ListViewItem的文本长度将是960(str长度+前置长度信息),但文本框长度中的文本是253 ...

这里发生了什么?它就像所有文本都进入了ListViewItem但它不能/不会全部显示(不,它不是列宽,我在上面的例子中将它设置为超过1000)。

添加ListViewItem并检查错误字符串:

ListViewItem listItem = new ListViewItem(msg.Date);

// Add sub-items for Details view.
listItem.SubItems.Add(msg.Time);
listItem.SubItems.Add(msg.Thread);
listItem.SubItems.Add("L: " + msg.Message.Length + " " + msg.Message);                        

if (!msg.Message.Contains("FA_FAILCNT"))
{
    if (msg.Message.Contains("fail", StringComparison.OrdinalIgnoreCase) ||
        msg.Message.Contains("exception", StringComparison.OrdinalIgnoreCase) ||
        msg.Message.Contains("db q", StringComparison.OrdinalIgnoreCase))
    {
        listItem.Font = new Font(listItem.Font, FontStyle.Bold);
        listItem.ForeColor = Color.Red;
    }
    else
        listItem.ForeColor = Color.Black;
}

显然它是给我问题的最后一个子项(获得msg.Message的那个)

编辑:好的废话,this explains it ....有什么方法吗?

1 个答案:

答案 0 :(得分:3)

您已经找到了不显示所有文字的原因。

到目前为止,我发现的最佳解决方案是将信息放在工具提示中,以便当用户将鼠标悬停在列上时整个字符串都可见 - 请参阅Listview subitem text is not shown fully in the UI eventhough the length of the text is correct

我看到这项工作的另一种方式是允许用户复制单元格的值。虽然显示的文本被截断,但将单元格值复制并粘贴到另一个应用程序中可以查看全文。

我认为唯一的其他“解决方法”将涉及编写您自己的控件 - 或者我不认为WPF中的ListView控件具有相同的限制。