使用C#.NET 2.0,我有一个自己绘制的ListView,我将覆盖OnDrawColumnHeader,OnDrawItem和OnDrawSubitem事件。如果我在设计时将View属性设置为Details,那么一切都很好用,我可以切换View属性,所有视图模式都应该显示(我没有使用Tile视图)。但是,如果我从任何其他视图开始,列表和详细信息视图都是空白的。
我知道你可能想要查看代码,但是有很多代码,所以我对发布这么多内容犹豫不决,但如果有必要的话可以。如果有人之前已经看过这个,我会更好奇,和/或可能对如何修复它有所了解。 View属性将是用户保存的设置,因此默认情况下我无法始终在详细信息视图中启动。
答案 0 :(得分:4)
未添加任何SubItems,或者您未添加任何列。这是我最初的感受。
答案 1 :(得分:2)
WinForms ListView主要是实际Windows控件顶层的一个抽象层,所以它的行为方面是,反直觉是一种礼貌的放置方式。
我有一个模糊的回忆,从我作为Delphi开发人员的日子开始,当你是所有者绘制ListView时,控件的子项实际上并没有填充,除非你的Listview在加载时是“详细信息”模式这些物品。
要尝试的事情......
...强制WinForms控件在您更改显示样式后重新创建基础窗口句柄。如果内存服务,DestroyHandle()是你想要的方法。
...假设您的应用程序中有一个“刷新”以重新加载数据,在更改显示样式后刷新时可以正常工作吗?
...如果所有其他方法都失败了,请在Windows编程中借用或窃取查尔斯的Petzolds经典副本。
答案 2 :(得分:0)
如果使用设计器正确配置它,只需进入生成的设计器代码,然后查看Visual Studio发出的代码,以使其正常工作。那只是模仿那段代码。
答案 3 :(得分:0)
对于你的代码,没有什么可以说,但只有在OwnerDraw属性设置为true时才会调用DrawColumnHeader。根据View属性,不确定它是否自动设置为true和false,但值得一试。因此,在启动应用程序之前,请确保将OwnerDraw设置为true。