2

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

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

4

4 回答 4

4

没有添加子项,或者您没有添加任何列。这是我最初的感觉。

于 2008-10-02T17:21:23.297 回答
2

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

在我作为 Delphi 开发人员的日子里,我有一个模糊的回忆,当您作为所有者绘制 ListView 时,除非您的 Listview 在加载项目时处于“详细信息”模式,否则实际上不会填充控件的子项。

要尝试的事情...

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

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

...如果一切都失败了,请借用或窃取 Charles 的 Windows 编程经典 Petzolds 的副本。

于 2008-10-22T09:49:24.467 回答
0

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

于 2008-10-22T03:05:28.603 回答
0

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

于 2008-10-22T09:17:02.673 回答