为什么不';t我的ListView显示列表或详细信息项

本文关键字:列表 显示 详细信息 ListView 我的 为什么不 | 更新日期: 2023-09-27 17:47:24

使用C#.NET 2.0,我有一个所有者绘制的ListView,在其中我将覆盖OnDrawColumnHeader、OnDrawItem和OnDrawSubitem事件。如果我在设计时将"视图"属性设置为"详细信息",一切都会很好地工作,并且我可以切换"视图"特性,所有视图模式都会按原样显示(我没有使用平铺视图)。但是,如果从任何其他视图开始,则"列表"answers"详细信息"视图都为空。

我知道你可能想看看代码,但有很多,所以我不太愿意发布那么多,但如果必要的话可以。我更好奇的是,是否有人以前见过这种情况,和/或可能知道如何修复它。View属性将是用户保存的设置,所以默认情况下我不能总是在Details视图中启动。

为什么不';t我的ListView显示列表或详细信息项

要么没有添加子项,要么没有添加任何列。这是我最初的感觉。

WinForms ListView主要是实际Windows控件顶部的抽象层,因此其行为的某些方面是违反直觉的,这是一种礼貌的放置方式。

在我作为Delphi开发人员的日子里,我有一个模糊的记忆,当你是绘制ListView的所有者时,控件的子项实际上并没有被填充,除非你加载项目时ListView处于"Details"模式。

尝试的事情。。。

强制WinForms控件在更改显示样式后重新创建基础窗口句柄。如果内存可用,DestroyHandle()就是您想要的方法。

假设您的应用程序中有一个"刷新"来重新加载数据,那么在更改显示样式后刷新时,情况是否正常?

如果其他一切都失败了,那就乞求借用或偷一本查尔斯的Petzolds关于windows编程的经典著作。

如果使用设计器对其进行了正确配置,只需进入生成的设计器代码,看看Visual Studio发出了哪些代码即可使其正常工作。他们只是模仿那个代码。

使用您的代码,没有什么好说的,但DrawColumnHeader只有在OwnerDraw属性设置为true时才会被调用。不确定它是否根据View属性自动设置为true和false,但值得一试。因此,在启动应用程序之前,请确保OwnerDraw设置为true。