共用方式為


基底設計工具類別

所有設計工具都會實作 IDesigner 介面,此介面會定義基本設計工具介面方法。.NET Framework 也提供一組基底設計工具類別,對支援特定元件或控制項型別的設計工具很有幫助。

IDesigner 介面

設計工具類別必須實作 IDesigner 介面,如下列程式碼範例所示。

Public Interface IDesigner
   Sub Dispose()
   Sub Initialize(component As IComponent)
   ' Other methods.
   ...
   ReadOnly Property Component() As IComponent
   ' Other properties.
   ...
End Interface
public interface IDesigner {
   void Dispose();
   void Initialize(IComponent component);
   // Other methods.
   ...
   IComponent Component {
        get;
   }
   // Other properties.
   ...
}

定位並初始化設計工具元件而且建立設計工具之後,會呼叫 IDesignerInitialize 方法。您可以覆寫 Initialize 方法來執行應該在元件或設計工具初始設定時發生的動作。您不能取代元件的建構函式初始設定,但可以擴大它或重設它初始化的屬性。IDesignerComponent 屬性是透過這個初始設定方法設定的。若要覆寫這個方法,一定要從 Initialize 方法呼叫 base.Initialize(component)。您可以從它的 Component 屬性存取 IDesigner 的元件。

Component 屬性可提供存取與這個設計工具相關聯的元件。這個屬性是在初次建立設計工具物件並且呼叫它的 Initialize 方法時設定的。元件具有與它相關聯的站台,並且設計工具會利用這個站台從設計工具的主應用程式取得服務。

按兩下元件或控制項時,會呼叫 DoDefaultAction 方法。

您可以覆寫 Verbs 屬性,傳回 DesignerVerbCollection,其中包含用來擴充元件捷徑功能表之功能表項目時必須要有的物件。

Dispose 方法在這個設計工具物件必須被毀棄時叫用。每當元件要從設計容器移除時,即會呼叫它。

元件的基底設計工具類別

ComponentDesigner 類別會實作 IDesignerIDesignerFilter 介面,另外提供對某些元件的設計工具可能會很實用的方法。

Windows Form 控制項的基底設計工具類別

Windows Form 控制項的基底設計工具類別是 ControlDesigner。這個類別衍生自 ComponentDesigner,它提供能自訂 Windows Form 控制項外觀和行為的其他有用方法。如需 Windows Form 設計工具的範例實作,請參閱 HOW TO:實作控制項的設計工具

DocumentDesigner 類別提供基底設計工具,可擴充支援巢狀控制項並接收捲動訊息之 Control 的設計模式行為,並為它提供根層次的設計模式檢視。如需詳細資訊,請參閱 HOW TO:建立採用設計階段功能的 Windows Form 控制項

注意事項注意事項

您必須加入對設計階段組件 (System.Design.dll) 的參考。這個組件未包含在 .NET Framework 4 Client Profile 中。若要加入對 System.Design.dll 的參考,您必須將專案的目標 Framework 變更為 [.NET Framework 4]。

ASP.NET 伺服器的基底設計工具類別

ASP.NET 伺服器控制項的基底設計工具類別是 ControlDesigner。這個類別針對自訂設計階段 HTML 的呈現提供基底功能。

設計階段整合的基底類別

TypeConverter 類別提供基底類別,可供與文字表示之間來回轉換型別。如需型別轉換子的詳細資訊,請參閱 HOW TO:實作型別轉換子產生的型別轉換

UITypeEditor 類別提供可以衍生的基底類別,也可以擴充,以實作設計階段環境的自訂型別編輯器。如需有關實作 UITypeEditor 的詳細資訊,請參閱使用者介面型別編輯器概觀

設計工具外觀和行為的基底類別

Behavior 類別可經過擴充,以開發任何類型的使用者介面行為,包括選取、拖曳和調整大小等行為。繪製及點擊測試 (Hit Testing) 是由 Glyph 類別執行。

如需詳細資訊,請參閱行為服務概觀

注意事項注意事項

您必須加入對設計階段組件 (System.Design.dll) 的參考。這個組件未包含在 .NET Framework 4 Client Profile 中。若要加入對 System.Design.dll 的參考,您必須將專案的目標 Framework 變更為 [.NET Framework 4]。

設計工具載入器的基底類別

BasicDesignerLoader 類別提供 IDesignerLoaderService 介面的實作。BasicDesignerLoader 是設計工具載入器的完整實作而與頁面保存格式毫無關聯。

CodeDomDesignerLoader 是抽象類別,可根據程式碼文件物件模型 (CodeDOM) 提供完整的設計工具載入器。

設計工具序列化的基底類別

CodeDomSerializerBase 類別提供 CodeDomSerializer 類別的基底類別。CodeDomSerializerBase 類別是用來做為 CodeDomSerializerTypeCodeDomSerializer 類別之間的共用基底。

DesignerSerializationManager 類別提供 IDesignerSerializationManager 介面的實作。

如需詳細資訊,請參閱 設計工具序列化概觀

智慧標籤的基底類別

DesignerActionList 類別提供型別的基底類別,定義用來建立智慧標籤面板的項目清單。如需詳細資訊,請參閱 HOW TO:將智慧標籤附加至 Windows Form 元件

注意事項注意事項

您必須加入對設計階段組件 (System.Design.dll) 的參考。這個組件未包含在 .NET Framework 4 Client Profile 中。若要加入對 System.Design.dll 的參考,您必須將專案的目標 Framework 變更為 [.NET Framework 4]。

自訂配置的基底類別

LayoutEngine 類別提供實作配置引擎的基底類別。TableLayoutPanelFlowLayoutPanel 控制項使用 the LayoutEngine 類別以提供配置行為。如需詳細資訊,請參閱 HOW TO:實作自訂配置引擎

標準設計工具

Windows Software Development Kit (SDK) 提供一組能支援特定元件類型的設計工具。這些設計工具是根據所設計的元件而命名,使用 Designer 字當做後置字元。例如,System.Windows.Forms.Control 類別的設計工具是 System.Windows.Forms.Design.ControlDesigner

通用設計工具功能

9k9st93e.collapse_all(zh-tw,VS.110).gif從設計工具存取設計階段服務

您可以藉由傳送所要求服務的型別,透過 GetService 方法要求大部分的設計階段服務型別。ComponentComponentDesigner 上有 GetService 方法。IServiceProvider 上也有 GetService 方法,是由在設計模式中所設置 IComponentSite 屬性傳回之 ISite 進行實作。

下列程式碼將示範如何使用 GetService 方法,取得 IDesignerHost 服務介面和 IMenuCommandService

如需詳細資訊,請參閱 HOW TO:存取設計階段服務

下列程式碼示範如何從設計模式服務提供者介面取得服務。

' Obtain an IDesignerHost service from the design-time environment.
Dim host As IDesignerHost = CType(Me.Component.Site.GetService(GetType(IDesignerHost)), IDesignerHost)
' Obtain an IMenuCommandService service.
Dim mcs As IMenuCommandService = CType(Me.Component.Site.GetService(GetType(IMenuCommandService)), IMenuCommandService)
// Obtain an IDesignerHost service from the design-time environment.
IDesignerHost host = (IDesignerHost)this.Component.Site.GetService(typeof(IDesignerHost));
// Obtain an IMenuCommandService service.
IMenuCommandService mcs = 
(IMenuCommandService)this.Component.Site.GetService(typeof(IMenuCommandService));

9k9st93e.collapse_all(zh-tw,VS.110).gif從設計工具存取專案元件

設計工具只要存取 IDesignerHost 服務介面中 Container 屬性的 Components 集合,即可取得設計模式文件之內元件的存取權。下列程式碼範例會示範如何存取目前設計模式專案中的元件。

' Obtains an IDesignerHost service from the design-time environment.
Dim host As IDesignerHost = CType(Me.Component.Site.GetService(GetType(IDesignerHost)), IDesignerHost)
' Gets the components container for the current design-time project.
Dim container As IContainer = host.Container
' The host.Container IContainer contains each IComponent in the project.
// Obtains an IDesignerHost service from the design-time environment.
IDesignerHost host = (IDesignerHost)this.Component.Site.GetService(typeof(IDesignerHost));
// Gets the components container for the current design-time project.
IContainer container = host.Container;
// The host.Container IContainer contains each IComponent in the project.

取得了元件集合的存取權之後,即可使用 TypeDescriptor 方法和 PropertyDescriptor 物件,以識別型別,並設定元件的屬性值。您也可以使用 IDesignerHost 介面的 CreateComponent 方法,建立元件。

擴充設計工具

當您從與設計工具有關聯的元件衍生時,基底類別的設計工具會依照預設與衍生元件產生關聯。您可以藉由套用 DesignerAttribute 屬性,此屬性會指定要與元件產生關聯的設計工具型別,將各種不同的設計工具與元件產生關聯。對於要擁有會擴充基底設計工具之設計工具的衍生元件,這是很常見的。

如需詳細資訊,請參閱 HOW TO:實作控制項的設計工具

若要擴充設計工具

  1. 定義一個衍生自基底設計工具類別的類別。

  2. 您可以透過套用 DesignerAttribute,將新的設計工具類別與元件產生關聯。

下列程式碼範例會定義可擴充 System.Web.UI.Design.WebControls.LabelDesigner 的設計工具,並將它與擴充 System.Web.UI.WebControls.Label 的自訂標籤產生關聯。

Namespace MyControls.Design
   Public Class MyLabelDesigner
      Inherits System.Web.UI.Design.WebControls.LabelDesigner
   End Class
End Namespace
Namespace MyControls
   <Designer(GetType(MyControls.Design.MyLabelDesigner))> _
   Public Class MyLabel
      Inherits System.Web.UI.WebControls.Label
   End Class
End Namespace
namespace MyControls.Design {
    public class MyLabelDesigner : System.Web.UI.Design.WebControls.LabelDesigner {}
}
namespace MyControls {
[Designer(typeof(MyControls.Design.MyLabelDesigner))]
    public class MyLabel : System.Web.UI.WebControls.Label {}
}
注意事項注意事項

如果您是為密封的類別定義設計工具,或者不想要其他類別使用或繼承您的設計工具,則可以將設計工具類別限制於組件內部使用。設計工具主應用程式將仍舊能夠建立您設計工具的執行個體,但它將不會做為公用物件模型。

請參閱

工作

HOW TO:存取設計階段服務

HOW TO:在 Windows Form 中存取設計階段支援

概念

中繼資料篩選

設計工具動詞命令

HOW TO:實作控制項的設計工具

其他資源

自訂設計工具