Почему мой ListView не отображает элементы List или Details? - PullRequest
2 голосов
/ 02 октября 2008

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

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

Ответы [ 4 ]

4 голосов
/ 02 октября 2008

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

2 голосов
/ 22 октября 2008

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

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

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

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

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

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

0 голосов
/ 22 октября 2008

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

0 голосов
/ 22 октября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...