c# - ListView 列是否有可显示的最大长度?

标签 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 ....有什么办法可以解决这个问题吗?

最佳答案

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

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

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

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

关于c# - ListView 列是否有可显示的最大长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6695619/

相关文章:

c# - OWIN 究竟使用什么函数来生成 token ;可以杠杆吗?

android - 用于 ExpandableListView 的 SimpleCursorTreeAdapter

c# - 完成后如何从集合中删除任务

c# - 单击按钮时如何从列表框和 ObservableCollection 中删除自定义项

asp.net-mvc-2 - 将此行添加到 web.config 有什么作用?

c# - 通过命令行工具生成基于Service.svcmap的文件

c# - 在本地调试 C# AWS Lambda 函数

c# - 在 C# 中比较数组的最简单方法

android - 在 OnClickListener 中刷新 Android ListView 数据

Android:选择ListView后保持蓝色背景