2011-01-13 84 views
2

的修改默認行爲,我使用的是屬性網格編輯,除其他事項外,項目的集合: alt textPropertyGrid中和TypeConverterAttribute

爲集合的默認行爲提供A +按鈕來編輯的每個成員陣列。

我使用的是表單編輯這個領域,它已經連接好,但我想刪除用戶通過使用「擴張」

所以它看起來像這樣編輯陣列的功能:

alt text

UPDATE1:由ProductIds一個IList屬性不是int [] 立即執行此:

alt text

-----------------!

UPDATE2:由ProductIds自定義類,如

MyWrappedCollection : IEnumerable<int> 

所以現在看起來是這樣的:

alt text

當然,它仍然顯示[+]但它不擴展到任何東西(即單擊時消失)

回答

3

控制屬性是否爲擴張與否是它的類型轉換器的屬性。 ExpandableObjectConverter是一個內置的類,它提供了擴展屬性並查看屬性的功能。我猜測默認情況下,數組和集合使用此轉換器來顯示它們中的內容。

您可以編寫自己的TypeConverter,它不從ExpandableObjectConverter繼承,並將其設置爲屬性的屬性以刪除+。

0

默認情況下,對於集合,它使用[...]方法。也許你可以使用集合(例如列表)而不是數組。

順便說一句,你使用數組的任何具體原因?

+0

我把ProductIds作爲IList而不是int [],你仍然可以擴展它。查看原始帖子的截圖。 – wal 2011-01-13 07:01:51

+0

批評道歉,但你的答案並沒有真正提供很多幫助。是的,只有當你點擊它時纔會出現。 – wal 2011-01-13 07:07:00

0

您需要實施並應用UITypeEdtitor。見How to: Implement a UI Type Editor

覆蓋您的UITypeEditor的GetEditStyle返回莫代爾

+0

我有一個UITypeEditor屬性已附加到此屬性。編輯器重寫GetEditStyle以返回Modal(因爲我使用它來彈出表單),但仍然顯示擴展圖標。 – wal 2011-01-13 07:49:03