Почему мой ListView не отображает элементы List или Details?

StackOverflow https://stackoverflow.com/questions/163472

  •  03-07-2019
  •  | 
  •  

Вопрос

Используя C # .NET 2.0, у меня есть нарисованный владельцем ListView, где я переопределяю события OnDrawColumnHeader, OnDrawItem и OnDrawSubitem. Если я установлю для свойства View значение Details во время разработки, все будет работать прекрасно, и я смогу переключить свойство View, и все режимы просмотра будут отображаться так, как должны (я не использую вид Tile). Тем не менее, если я начну в любом другом представлении, представления «Список» и «Сведения» будут пустыми.

Я знаю, что вы, вероятно, захотите увидеть код, но его много, поэтому я не решаюсь публиковать его так много, но могу при необходимости. Мне более любопытно, если бы кто-то видел это раньше, и / или мог бы подумать, как это исправить. Свойство View будет сохранено пользователем, поэтому я не всегда смогу запустить его в представлении Details по умолчанию.

Это было полезно?

Решение

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

У меня есть смутные воспоминания о том, что когда-то, будучи разработчиком на Delphi, вы были владельцем, создающим ListView, подэлементы элемента управления фактически не заполняются, если только ваш Listview не находится в " Подробности " режим при загрузке предметов.

Что попробовать ...

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

... при условии, что у вас есть " Обновить " В вашем приложении для перезагрузки данных все работает правильно, когда вы обновляете после изменения стиля отображения?

... если ничего не помогает, попросите одолжить или украсть копию классики Чарльза Петцольда по программированию Windows.

Другие советы

Либо подэлементы не добавлены, либо вы не добавили столбцы. Это мое первоначальное чувство.

Если вы правильно настроили его с помощью конструктора, просто зайдите в сгенерированный код конструктора и посмотрите, какой код был создан Visual Studio, чтобы заставить его работать правильно. Затем просто эмулируйте этот код.

Без вашего кода ничего особенного сказать нельзя, но DrawColumnHeader вызывается только тогда, когда для свойства OwnerDraw установлено значение true. Не уверен, что для него автоматически установлено значение true и false в зависимости от свойства View, но стоит попробовать. Поэтому убедитесь, что для OwnerDraw установлено значение true, прежде чем запускать приложение.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top