У столбцов ListView максимальная длина, которую они могут отображать? - PullRequest
2 голосов
/ 14 июля 2011

Я столкнулся со странной проблемой ListView и постараюсь объяснить ее.У меня есть ListView с 4 столбцами, последний из которых представляет собой строку сообщения различной длины.У меня есть некоторые функциональные возможности, которые изменят красный элемент ListView, если он содержит определенные ключевые слова (сбой, исключение, т. Д.).

Впервые я заметил эту проблему, когда один элемент был красным, и я не увидел ни одного слова встолбец, который будет вызывать красный код раскраски.Итак, у меня была Длина входящей строки, предшествующая элементу, и я добавил текстовое поле, которое будет отображать текст этого столбца при выборе.Я обнаружил, что предваряющая длина (фактическая длина входящей строки) будет равна 953, длина текста извлеченного ListViewItem будет равна 960 (длина строки + информация о предварительно добавленной длине), но текст, который будет в длине текстового поля, равен 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: Ну дерьмо, это объясняет это .... какие-нибудь способы обойти это?

1 Ответ

3 голосов
/ 14 июля 2011

Вы уже нашли причину, по которой отображается не весь текст.

Лучшее решение, которое я нашел на данный момент, это поместить информацию во всплывающую подсказку, чтобы вся строка была видна, когда пользователь наводит указатель мыши на столбец - см. Текст подэлемента списка просмотра не отображается полностью в пользовательский интерфейс, хотя длина текста правильна .

Еще один способ, которым я видел эту работу, - позволить пользователям копировать значение ячейки. Хотя отображаемый текст обрезан, копирование и вставка значения ячейки в другое приложение позволяет просматривать полный текст.

Я полагаю, что единственный другой «обходной путь» будет связан с написанием вашего собственного элемента управления - в качестве альтернативы я не думаю, что элемент управления ListView в WPF имеет такое же ограничение.

...