各種自訂控制項

使用 .NET Framework,您可以開發及實作新的控制項。 您可以擴充熟悉的使用者控制項的功能,以及透過繼承擴充現有的控制項。 您也可以撰寫自訂控制項來執行它們自己的繪製。

決定要建立的控制項類型可能會令人困擾。 本主題著重於您可以繼承之各種控制項之間的差異,並且提供如何為專案選擇特定種類控制項的相關資訊。

注意

如需撰寫控制項以在 Web Form 上使用的詳細資訊,請參閱開發自訂 ASP.NET 伺服器控制項

基底控制項類別

Control 類別是 Windows Forms 控制項的基底類別。 它提供視覺顯示 Windows Forms 應用程式所需的基礎結構。

Control 類別會執行下列工作,以提供 Windows Forms 應用程式的視覺顯示:

  • 公開視窗控制代碼。

  • 管理訊息路由。

  • 提供滑鼠和鍵盤事件,以及其他許多使用者介面事件。

  • 提供進階版面配置功能。

  • 包含多個專用於視覺顯示的屬性,例如 ForeColorBackColorHeightWidth

  • 提供 Windows Forms 控制項做為 Microsoft® ActiveX® 控制項所需的安全性和執行緒支援。

因為基底類別提供了非常多的基礎結構,所以開發您自己的 Windows Forms 控制項相對容易。

控制項種類

Windows Forms 支援三種使用者定義的控制項︰複合、擴充和自訂。 下列章節描述每一種控制項,並且提供選擇要用於專案類型的建議。

複合控制項

複合控制項是封裝成通用容器的 Windows Forms 控制項的集合。 這類控制項有時候稱為「使用者控制項」。 包含的控制項稱為「組成控制項」

複合控制項保存了與每個 Windows Forms 控制項相關聯的所有固有功能,並可讓您選擇性地公開和繫結其屬性。 複合控制項也提供大量的預設鍵盤處理功能,讓您在開發時不需要付出額外努力。

例如,可以建置複合控制項來顯示資料庫中的客戶地址資料。 此控制項可包含 DataGridView 控制項以顯示資料庫欄位、BindingSource 用以處理對資料來源的繫結,以及 BindingNavigator 控制項用以瀏覽記錄。 您可以選擇性地公開資料繫結屬性,而整個控制項可以封裝,並且在各應用程式之間重複使用。 如需此類複合控制項的範例,請參閱如何:在 Windows Forms 控制項中套用屬性

若要撰寫複合控制項,請從 UserControl 類別衍生。 UserControl 基底類別提供子系控制項的鍵盤路由,並且讓子系控制項可作為群組運作。 如需詳細資訊,請參閱開發複合 Windows Forms 控制項

建議

如果有下列情況,便繼承自 UserControl 類別:

  • 您想要將數個 Windows Form 控制項的功能結合成一個可重複使用的單位。

擴充控制項

您可以從任何現有的 Windows Form 控制項衍生繼承的控制項。 使用這種方法,您可以保留 Windows Forms 控制項的所有固有功能,然後藉由新增自訂屬性、方法或其他功能,以擴充該功能。 使用這個選項,您可以覆寫基底控制項的繪製邏輯,然後藉由變更其外觀,以擴充其使用者介面。

例如,您可以建立控制項,該控制項衍生自 Button 控制項,會追蹤使用者已點擊它多少次。

在一些控制項中,您也可以藉由覆寫基底類別的 OnPaint 方法,將自訂外觀新增至控制項的使用者圖形化介面。 對於追蹤點擊的擴充按鈕,您可以覆寫 OnPaint 方法以呼叫 OnPaint 的基底實作,然後在 Button 控制項用戶端區域的一角繪製點擊計數。

建議

如果有下列情況,便繼承自 Windows Form 控制項:

  • 大部分的所需功能已經與現有的 Windows Form 控制項相同。

  • 您不需要自訂的圖形化使用者介面,或是您想要為現有的控制項設計新的圖形化使用者介面。

自訂控制項

建立控制項的另一個方法是藉由繼承自 Control,從頭建立一個控制項。 Control 類別會提供控制項所需的所有基本功能,包括滑鼠和鍵盤處理事件,但不提供控制項特有的功能或圖形化介面。

藉由繼承自 Control 類別來建立控制項,比繼承自 UserControl 或現有的 Windows Form 控制項需要更多的思考和投入工作。 因為已為您保留許多實作,所以您的控制項比複合或擴充控制項具有更大的彈性,您可以量身打造您的控制項以符合您的確切需求。

若要實作自訂控制項,您必須為控制項的 OnPaint 事件撰寫程式碼,以及您需要的任何特定功能程式碼。 您也可以覆寫 WndProc 方法並直接處理 Windows 訊息。 這是建立控制項最強大的方式,但是若要有效使用這項技術,您必須先熟悉 Microsoft Win32® API。

自訂控制項的範例是複製類比時鐘外觀和行為的時鐘控制項。 會叫用自訂繪製,讓時鐘指針移動以回應內部 Timer 元件的 Tick 事件。 如需詳細資訊,請參閱如何:開發簡單的 Windows Forms 控制項

建議

如果有下列情況,便繼承自 Control 類別:

  • 您想要提供控制項的自訂圖形表示。

  • 您需要實作無法透過標準控制項使用的自訂功能。

ActiveX 控制項

雖然 Windows Forms 基礎結構已進行最佳化來裝載 Windows Forms 控制項,但是您仍然可以使用 ActiveX 控制項。 在 Visual Studio 中會支援這項工作。 如需詳細資訊,請參閱如何:將 ActiveX 控制項新增至 Windows Forms

無視窗控制項

Microsoft Visual Basic® 6.0 和 ActiveX 技術支援「無視窗」控制項。 在 Windows Forms 中不支援無視窗控制項。

自訂設計體驗

如果您需要實作自訂設計階段經驗,您可以撰寫自己的設計工具。 對於複合控制項,請從 ParentControlDesignerDocumentDesigner 類別衍生您的自訂設計工具類別。 對於擴充和自訂控制項,請從 ControlDesigner 類別衍生您的自訂設計工具類別。

使用 DesignerAttribute 將您的控制項與設計工具產生關聯。 如需詳細資訊,請參閱擴充設計階段支援如何:建立採用設計階段功能的 Windows Forms 控制項

另請參閱