使用者介面型別編輯器概觀
您可以透過實作使用者介面 (UI) 型別編輯器,提供複雜屬性型別的自訂設計階段經驗。
顯示及編輯自訂型別
將自訂型別公開為屬性時,有三個方法可以編輯 PropertyGrid 中的屬性值:
您可以編輯屬性來取代字串。 這項作業需要自訂型別的 TypeConverter。 如需詳細資訊,請參閱 HOW TO:實作型別轉換子。
您可以利用下拉式 UI 編輯屬性。 這項功能對可以按一下就設定的屬性特別有用。
您可以利用強制回應對話方塊編輯屬性。 如果屬性特別複雜,可能就需要完整的對話方塊,才能正確編輯。
若要啟用單按一下或強制回應對話方塊,必須實作 UI 型別編輯器,以與 PropertyGrid 互動。
下拉式編輯器
下拉式編輯器對可用單按一下設定的型別來說很理想。 例如,可以利用下拉式編輯器,在 PropertyGrid 中,編輯 Control 類別的 Dock 和 BackColor 屬性。
您可以按一下 PropertyGrid 中所選取屬性項目旁邊顯示的箭號按鈕 (),存取下拉式 UI 型別編輯器。 您的自訂 UI 隨即顯示,附加至 PropertyGrid。 其視窗頂端是沿著屬性項目底端放置,而且其寬度與屬性項目相符。 這個編輯器視窗也必須在使用者選取之後關閉。 您的實作必須呼叫 DropDownControl 方法,在設計環境中放置 UI 型別編輯器視窗並調整其大小,而且也必須呼叫 CloseDropDown 方法,以關閉視窗。
強制回應對話方塊編輯器
強制回應編輯器對需要完整互動式 UI 的型別來說很有用。 例如,像 TabControl 的 [TabPage 集合編輯器],或是 DataGridView 控制項的 [編輯資料行] 對話方塊等集合編輯器都是強制回應編器。
您可以按一下 PropertyGrid 中所選取屬性項目旁邊顯示的省略符號按鈕 (),存取強制回應 UI 型別編輯器。 您的強制回應對話方塊隨即顯示,而使用者以類似一般對話方塊的方式與其互動。 您的實作必須呼叫 ShowDialog 方法,以便在設計環境中放置對話方塊並調整其大小。
實作 UI 型別編輯器
若要實作自訂 UI 型別編輯器,必須至少執行下列工作:
定義從 UITypeEditor 衍生的類別
覆寫 GetEditStyle 方法,以通知 PropertyGrid 編輯器將使用何種編輯器樣式
覆寫 EditValue 方法,以處理 UI、使用者輸入處理,以及值指派
您可以加入其他支援,以供透過執行下列工作,在 PropertyGrid 中繪製值的表示:
覆寫 GetPaintValueSupported,以表示編輯器支援顯示值的表示
覆寫 PaintValue,以實作值表示的顯示
如果編輯器應該有初始化行為,則覆寫 UITypeEditor 建構函式方法
注意事項 |
---|
UI 型別編輯器經常會從 System.Windows.Forms 命名空間進行實作,但並非必要。.NET Framework 的標準 UI 型別編輯器是從 UITypeEditor 衍生的。 |
從 UITypeEditor 類別衍生
您的自訂 UI 型別編輯器必須從 UITypeEditor 類別衍生。 如果您的 UI 型別編輯器需要進行特殊的初始化作業,則定義預設建構函式。
覆寫 GetEditStyle 方法
當您在設計工具中選取元件或控制項時,[屬性] 視窗是利用所選取元件或控制項的屬性值重新繪製。 當您選取屬性時,設計環境會查詢 GetEditStyle 方法,以判斷如何表示屬性項目。
您的覆寫會傳回 UITypeEditorEditStyle 列舉型別的值,以溝通 UI 型別編輯器的適當樣式。
下表說明了與各個 UITypeEditorEditStyle 值相關聯的行為。
成員名稱 |
行為 |
---|---|
不提供互動式 UI 元件。 使用適當的 TypeConverter,將字串項目轉換成屬性值。 |
|
在屬性項目中顯示向下箭號按鈕 ()。 UI 是裝載在下拉式視窗中。 |
|
在屬性項目中顯示省略符號按鈕 ()。 UI 是強制回應對話方塊。 |
覆寫 EditValue 方法
EditValue 方法會顯示 UI,並將屬性的值設定為由使用者選取的值。
下拉式編輯器
對於下拉式 UI 型別編輯器,您要查詢 IWindowsFormsEditorService 介面的服務提供者。 這項服務會提供 UI 的位置及大小資訊。 您的 UI 一般都會實作為 Control。 您的 EditValue 實作會建立這個控制項的執行個體,使用目前的屬性值將它初始化,然後再傳遞給 DropDownControl 方法,供設計環境加以執行。 當使用者選取了新的屬性值時,EditValue 實作就會透過呼叫 CloseDropDown,關閉 UI。 從 EditValue 實作傳回的值會變成顯示在 PropertyGrid 中的新屬性值。
強制回應編輯器
對於強制回應 UI 型別編輯器,您要查詢 IWindowsFormsEditorService 介面的服務提供者。 這項服務會提供對話方塊的位置資訊。 您的 UI 一般都會實作為從 Form 衍生的類別。 您的 EditValue 實作會建立這個表單的執行個體,使用目前的屬性值將它初始化,然後再傳遞給 ShowDialog 方法,供設計環境加以執行。 如果從這個呼叫傳回的值是 OK,就從表單擷取新的屬性值,然後用它做為傳回值。 從 EditValue 實作傳回的值會變成顯示在 PropertyGrid 中的新屬性值。
ITypeDescriptorContext 參數
EditValue 方法會接到 ITypeDescriptorContext 參數,您可以用來查詢有關設計環境的內容資訊。 有了這個參數,您可以存取下列成員:
PropertyDescriptor,代表屬性的中繼資料
Instance 屬性,指向 PropertyGrid 中已選取的元件。
元件的 IContainer。
OnComponentChanging 和 OnComponentChanged 方法,會在您變更元件狀態時,警告設計環境。
提供屬性值的圖形表示
您可以透過覆寫 PaintValue 方法,顯示屬性值的圖形表示。 您可以使用所提供的 PaintValueEventArgs 參數,在 PropertyGrid 中屬性項目左邊的小矩形中繪製您的表示。
注意事項 |
---|
一定要將您的圖形表示保持在 PaintValueEventArgs 參數之 Bounds 屬性所定義的界限之內。 |
覆寫 GetPaintValueSupported 方法,傳回 true,以警告設計環境,您的 UI 型別編輯器繪製了其值的自訂表示。
請參閱
工作
HOW TO:建立採用設計階段功能的 Windows Form 控制項