共用方式為


自訂控制元件 (Windows Forms .NET)

使用 Windows Forms,您可以開發和實作新的控件。 您可以建立新的使用者控件、透過繼承修改現有的控件,或撰寫自定義控件以執行自己的繪製。 本文強調您可以繼承的各種控件之間的差異,並提供如何為您的項目選擇特定控件類型的相關信息。

重要

.NET 7 和 .NET 6 的桌面指南檔正在建置中。

基底控件類別

類別 Control 是 Windows Forms 控件的基類。 它提供 Windows Forms 應用程式中視覺顯示所需的基礎結構,並提供下列功能:

  • 公開視窗控制代碼。
  • 管理訊息路由。
  • 提供滑鼠和鍵盤事件,以及其他許多使用者介面事件。
  • 提供進階版面配置功能。
  • 包含視覺效果顯示的特定許多屬性,例如 ForeColorBackColorHeightWidth

因為基類提供這麼多基礎結構,所以開發您自己的 Windows Forms 控件相當容易。

建立您自己的控制件

您可以建立三種類型的自定義控制項:使用者控制項、擴充控件和自定義控制項。 下表可協助您決定應該建立的控制項類型:

如果。。。 建立 ...
  • 您想要將數個 Windows Form 控制項的功能結合成一個可重複使用的單位。
繼承自 System.Windows.Forms.UserControl 來設計使用者控件。
  • 大部分的所需功能已經與現有的 Windows Form 控制項相同。
  • 您不需要自定義圖形使用者介面,或想要為現有控件設計新的圖形用戶介面。
繼承自特定 Windows Forms 控制件,以擴充控件
  • 您想要提供控制項的自訂圖形表示。
  • 您必須實作無法透過標準控件使用的自定義功能。
繼承自 System.Windows.Forms.Control,以建立自定義控件

使用者控制件

使用者控件是向取用者呈現為單一控件的 Windows Forms 控件集合。 這種控件稱為 複合控件。 包含的控制項稱為「組成控制項」

使用者控件會保存與每個自主 Windows Forms 控件相關聯的所有固有功能,並可讓您選擇性地公開和系結其屬性。 使用者控制項也提供大量的預設鍵盤處理功能,而不需要額外的開發工作。

例如,可以建置使用者控件來顯示資料庫中的客戶地址數據。 此控制項會包含 DataGridView 控制項來顯示資料庫欄位、 BindingSource 處理系結至數據來源的,以及 BindingNavigator 要透過記錄行動的控制件。 您可以選擇性地公開數據系結屬性,而且您可以將整個控件從應用程式封裝及重複使用。

如需詳細資訊,請參閱 使用者控件概觀

擴充控件

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

例如,您可以建立衍生自 控件的 Button 控件,以追蹤使用者按下該控件的次數。

在某些控制項中,您也可以覆寫 OnPaint 基類的 方法,將自定義外觀新增至控件的圖形用戶介面。 針對追蹤點選的擴充按鈕,您可以覆寫 OnPaint 方法來呼叫 的基底實 OnPaint作,然後在控件工作區的一個角落 Button 繪製點擊計數。

自訂控制項

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

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

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

自訂控制項的範例是複製類比時鐘外觀和行為的時鐘控制項。 會叫用自定義繪製,讓時鐘的手在響應 Tick 內部 Timer 元件的事件時移動。

自訂設計體驗

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

DesignerAttribute使用 將控件與設計工具產生關聯。

下列資訊已過期,但可能有助於您。