共用方式為


使用者介面型別編輯器概觀

您可以透過實作使用者介面 (UI) 型別編輯器,提供複雜屬性型別的自訂設計階段經驗。

顯示及編輯自訂型別

將自訂型別公開為屬性時,有三個方法可以編輯 PropertyGrid 中的屬性值:

  • 您可以編輯屬性來取代字串。 這項作業需要自訂型別的 TypeConverter。 如需詳細資訊,請參閱 HOW TO:實作型別轉換子

  • 您可以利用下拉式 UI 編輯屬性。 這項功能對可以按一下就設定的屬性特別有用。

  • 您可以利用強制回應對話方塊編輯屬性。 如果屬性特別複雜,可能就需要完整的對話方塊,才能正確編輯。

若要啟用單按一下或強制回應對話方塊,必須實作 UI 型別編輯器,以與 PropertyGrid 互動。

下拉式編輯器

下拉式編輯器對可用單按一下設定的型別來說很理想。 例如,可以利用下拉式編輯器,在 PropertyGrid 中,編輯 Control 類別的 DockBackColor 屬性。

您可以按一下 PropertyGrid 中所選取屬性項目旁邊顯示的箭號按鈕 (屬性視窗向下鍵),存取下拉式 UI 型別編輯器。 您的自訂 UI 隨即顯示,附加至 PropertyGrid。 其視窗頂端是沿著屬性項目底端放置,而且其寬度與屬性項目相符。 這個編輯器視窗也必須在使用者選取之後關閉。 您的實作必須呼叫 DropDownControl 方法,在設計環境中放置 UI 型別編輯器視窗並調整其大小,而且也必須呼叫 CloseDropDown 方法,以關閉視窗。

強制回應對話方塊編輯器

強制回應編輯器對需要完整互動式 UI 的型別來說很有用。 例如,像 TabControl 的 [TabPage 集合編輯器],或是 DataGridView 控制項的 [編輯資料行] 對話方塊等集合編輯器都是強制回應編器。

您可以按一下 PropertyGrid 中所選取屬性項目旁邊顯示的省略符號按鈕 (VisualStudioEllipsesButton 螢幕擷取畫面),存取強制回應 UI 型別編輯器。 您的強制回應對話方塊隨即顯示,而使用者以類似一般對話方塊的方式與其互動。 您的實作必須呼叫 ShowDialog 方法,以便在設計環境中放置對話方塊並調整其大小。

實作 UI 型別編輯器

若要實作自訂 UI 型別編輯器,必須至少執行下列工作:

您可以加入其他支援,以供透過執行下列工作,在 PropertyGrid 中繪製值的表示:

注意事項注意事項

UI 型別編輯器經常會從 System.Windows.Forms 命名空間進行實作,但並非必要。 .NET Framework 的標準 UI 型別編輯器是從 UITypeEditor 衍生的。

從 UITypeEditor 類別衍生

您的自訂 UI 型別編輯器必須從 UITypeEditor 類別衍生。 如果您的 UI 型別編輯器需要進行特殊的初始化作業,則定義預設建構函式。

覆寫 GetEditStyle 方法

當您在設計工具中選取元件或控制項時,[屬性] 視窗是利用所選取元件或控制項的屬性值重新繪製。 當您選取屬性時,設計環境會查詢 GetEditStyle 方法,以判斷如何表示屬性項目。

您的覆寫會傳回 UITypeEditorEditStyle 列舉型別的值,以溝通 UI 型別編輯器的適當樣式。

下表說明了與各個 UITypeEditorEditStyle 值相關聯的行為。

成員名稱

行為

None

不提供互動式 UI 元件。 使用適當的 TypeConverter,將字串項目轉換成屬性值。

DropDown

在屬性項目中顯示向下箭號按鈕 (屬性視窗向下鍵)。 UI 是裝載在下拉式視窗中。

Modal

在屬性項目中顯示省略符號按鈕 (VisualStudioEllipsesButton 螢幕擷取畫面)。 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 參數,您可以用來查詢有關設計環境的內容資訊。 有了這個參數,您可以存取下列成員:

提供屬性值的圖形表示

您可以透過覆寫 PaintValue 方法,顯示屬性值的圖形表示。 您可以使用所提供的 PaintValueEventArgs 參數,在 PropertyGrid 中屬性項目左邊的小矩形中繪製您的表示。

注意事項注意事項

一定要將您的圖形表示保持在 PaintValueEventArgs 參數之 Bounds 屬性所定義的界限之內。

覆寫 GetPaintValueSupported 方法,傳回 true,以警告設計環境,您的 UI 型別編輯器繪製了其值的自訂表示。

請參閱

工作

HOW TO:建立 UI 型別編輯器

HOW TO:建立採用設計階段功能的 Windows Form 控制項

參考

UITypeEditorEditStyle

IWindowsFormsEditorService

其他資源

使用者介面型別編輯器