使用C#.NET 2.0,我有一个自己绘制的ListView,我将覆盖OnDrawColumnHeader,OnDrawItem和OnDrawSubitem事件。如果我在设计时将View属性设置为Details,那么一切都很好用,我可以切换View属性,所有视图模式都应该显示(我没有使用Tile视图)。但是,如果我从任何其他视图开始,则列表视图和详细信息视图都是空白的。

我知道你可能想要查看代码,但是有很多代码,所以我对发布这么多内容犹豫不决,但如果有必要的话可以。如果有人之前已经看过这个,我会更好奇,和/或可能对如何修复它有所了解。 View属性将是用户保存的设置,因此默认情况下我无法始终在详细信息视图中启动。

有帮助吗?

解决方案

WinForms ListView主要是实际Windows控件顶层的一个抽象层,所以它的行为方面是,反直觉是一种礼貌的放置方式。

在我作为Delphi开发人员的日子里,我有一个模糊的回忆,当你是所有者绘制ListView时,控件的子项实际上并没有被填充,除非你的Listview在“详细信息”中。加载项目时的模式。

要尝试的事情......

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

...假设你有一个“刷新”在您的应用程序中重新加载数据,在更改显示样式后刷新时是否正常工作?

...如果所有其他方法都失败了,请在Windows编程中借用或窃取查尔斯的Petzolds经典副本。

其他提示

未添加任何SubItems,或者您未添加任何列。这是我最初的感受。

如果使用设计器正确配置它,只需进入生成的设计器代码,然后查看Visual Studio发出的代码,以使其正常工作。那只是模仿那段代码。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top