基底設計工具類別
所有設計工具都會實作 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.
...
}
定位並初始化設計工具元件而且建立設計工具之後,會呼叫 IDesigner 的 Initialize 方法。 您可以覆寫 Initialize 方法來執行應該在元件或設計工具初始設定時發生的動作。 您不能取代元件的建構函式初始設定,但可以擴大它或重設它初始化的屬性。 IDesigner 的 Component 屬性是透過這個初始設定方法設定的。 若要覆寫這個方法,一定要從 Initialize 方法呼叫 base.Initialize(component)。 您可以從它的 Component 屬性存取 IDesigner 的元件。
Component 屬性可提供存取與這個設計工具相關聯的元件。 這個屬性是在初次建立設計工具物件並且呼叫它的 Initialize 方法時設定的。 元件具有與它相關聯的站台,並且設計工具會利用這個站台從設計工具的主應用程式取得服務。
按兩下元件或控制項時,會呼叫 DoDefaultAction 方法。
您可以覆寫 Verbs 屬性,傳回 DesignerVerbCollection,其中包含用來擴充元件捷徑功能表之功能表項目時必須要有的物件。
Dispose 方法在這個設計工具物件必須被毀棄時叫用。 每當元件要從設計容器移除時,即會呼叫它。
元件的基底設計工具類別
ComponentDesigner 類別會實作 IDesigner 和 IDesignerFilter 介面,另外提供對某些元件的設計工具可能會很實用的方法。
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 類別是用來做為 CodeDomSerializer 與 TypeCodeDomSerializer 類別之間的共用基底。
DesignerSerializationManager 類別提供 IDesignerSerializationManager 介面的實作。
如需詳細資訊,請參閱 設計工具序列化概觀。
智慧標籤的基底類別
DesignerActionList 類別提供型別的基底類別,定義用來建立智慧標籤面板的項目清單。 如需詳細資訊,請參閱 HOW TO:將智慧標籤附加至 Windows Form 元件。
注意事項 |
---|
您必須加入對設計階段組件 (System.Design.dll) 的參考。這個組件未包含在 .NET Framework 4 Client Profile 中。若要加入對 System.Design.dll 的參考,您必須將專案的目標 Framework 變更為 [.NET Framework 4]。 |
自訂配置的基底類別
LayoutEngine 類別提供實作配置引擎的基底類別。 TableLayoutPanel 和 FlowLayoutPanel 控制項使用 the LayoutEngine 類別以提供配置行為。 如需詳細資訊,請參閱 HOW TO:實作自訂配置引擎。
標準設計工具
Windows Software Development Kit (SDK) 提供一組能支援特定元件類型的設計工具。 這些設計工具是根據所設計的元件而命名,使用 Designer 字當做後置字元。 例如,System.Windows.Forms.Control 類別的設計工具是 System.Windows.Forms.Design.ControlDesigner。
通用設計工具功能
從設計工具存取設計階段服務
您可以藉由傳送所要求服務的型別,透過 GetService 方法要求大部分的設計階段服務型別。 Component 和 ComponentDesigner 上有 GetService 方法。 IServiceProvider 上也有 GetService 方法,是由在設計模式中所設置 IComponent 的 Site 屬性傳回之 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));
從設計工具存取專案元件
設計工具只要存取 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:實作控制項的設計工具。
若要擴充設計工具
定義一個衍生自基底設計工具類別的類別。
您可以透過套用 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:在 Windows Form 中存取設計階段支援