首页 文章

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

提问于
浏览
2

我遇到了一个奇怪的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的那个)

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

1 回答

  • 3

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

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

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

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

相关问题