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

本文关键字:显示 是否 ListView | 更新日期: 2023-09-27 18:02:10

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

我第一次注意到这个问题时,一个项目是红色的,我在列中没有看到任何会触发红色着色代码的单词。因此,我在条目前添加了输入字符串的Length,并添加了一个文本框,该文本框在被选中时将显示该列的文本。我发现的是,前置长度(传入字符串的实际长度)将像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的那个)

编辑:废话,这解释了它....有什么解决办法吗?

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

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

到目前为止,我发现的最佳解决方案是将信息放在工具提示中,以便当用户将鼠标悬停在列上时,整个字符串是可见的-参见Listview子项文本在UI中不完全显示,即使文本的长度是正确的。

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

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