2008-10-02 93 views
2

使用C#.NET 2.0,我有一個所有者繪製的ListView,我重寫了OnDrawColumnHeader,OnDrawItem和OnDrawSubitem事件。如果我在設計時將View屬性設置爲Details,則一切都很好,我可以切換View屬性和所有視圖模式(我不使用Tile視圖)。但是,如果我以任何其他視圖開始,「列表」和「詳細信息」視圖都是空白的。爲什麼我的ListView不顯示List或Details項目?

我知道你可能會想看代碼,但有很多,所以我很猶豫發佈了那麼多,但如果有必要的話可以。如果以前有人看到過這種情況,我更加好奇,並且/或者可能會弄清楚如何解決問題。 View屬性將是一個用戶保存的設置,因此我不會始終能夠在Details視圖中默認啓動。

回答

2

WinForms ListView主要是一個實際的Windows控件的頂層抽象層,所以它的行爲方面是違反直覺是禮貌的方式。

我有一個模糊的回憶,從我作爲Delphi開發人員的日子回來,當您是所有者繪製ListView時,控件的子項目實際上並未填充,除非您的ListView處於「Details」模式加載項目。

事情嘗試...

...迫使WinForms的控制重新更改顯示樣式後的基本窗口辦理。如果內存服務,DestroyHandle()是你想要的方法。

...假設您在應用程序中有一個「刷新」來重新加載數據,當您在更改顯示樣式後刷新時,可以正常工作嗎?

......如果一切都失敗了,請求借用或在windows編程中盜取Charles'Petzolds classic的副本。

4

不添加任何子項目,或者您沒有添加任何列。這是我最初的感覺。

0

如果使用設計器正確配置它,只需進入生成的設計器代碼並查看Visual Studio發出的代碼是否正確運行。這只是模擬該代碼。

0

對於你的代碼,沒有什麼可說的,但是隻有當OwnerDraw屬性設置爲true時纔會調用DrawColumnHeader。不確定它是否根據View屬性自動設置爲true和false,但值得一試。因此,在啓動應用程序之前,請確保將OwnerDraw設置爲true。

相關問題