各種自訂控制項

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

決定要建立哪種類型的控制項,可能會令人感到困惑。 這個主題強調您可繼承的各種控制項之間的差異,並提供您如何為專案選擇特定控制項的詳細資訊。

注意事項注意事項

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

基底控制項類別

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

Control 類別執行下列工作,在 Windows Form 應用程式中提供視覺顯示:

  • 公開視窗控制代碼

  • 管理訊息路由

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

  • 提供進階的配置功能

  • 包含許多視覺顯示特定的屬性,例如 ForeColorBackColorHeightWidth

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

因為基底類別提供如此大量的基礎結構,開發您自己的 Windows Form 控制項變得相當容易。

控制項的種類

Windows Form 支援三種使用者定義的控制項:「複合」、「擴充」和「自訂」。 下列章節會說明每一種控制項,並針對要在專案中選澤使用何種控制項提供了建議。

複合控制項

複合控制項是封裝在通用容器 (Container) 中的 Windows Form 控制項的集合。 這種控制項有時稱為「使用者控制項」。 被收納的控制項稱為「構成控制項」。

複合控制項保留與每個被收納的 Windows Form 控制項關聯的所有繼承功能,且可讓您選擇性地公開及繫結其屬性。 複合控制項也提供了許多預設的鍵盤處理功能,使您不需要耗費額外的心力在開發工作上。

例如,可以建置複合控制項,以顯示資料庫的客戶地址資料。 這個控制項可能包含顯示資料庫欄位的 DataGridView 控制項、處理繫結至資料來源的 BindingSource,以及在資料錄之間移動的 BindingNavigator 控制項。 您可以選擇性地公開資料繫結屬性,且能夠在不同的應用程式之間封裝並重複使用整個控制項。 如需這種複合控制項的詳細資訊,請參閱 HOW TO:在 Windows Form 控制項中套用屬性

若要撰寫複合控制項,請衍生自 UserControl 類別。 基底類別 UserControl 提供子控制項的鍵盤路由,並讓子控制項能夠當做群組使用。 如需詳細資訊,請參閱開發複合 Windows Form 控制項

建議

如果發生下列情況,則自 UserControl 類別繼承:

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

擴充控制項

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

例如,您可以建立衍生自 Button 控制項的控制項,追蹤使用者點選該控制項的次數。

在部分控制項中,也可以藉由覆寫基底類別的 OnPaint 方法,將自訂外觀加入控制項的圖形化使用者介面。 對於追蹤點選次數的擴充按鈕,您可以覆寫 OnPaint 方法以呼叫 OnPaint 的基底實作,然後在 Button 控制項工作區 (Client Area) 的其中一個角落中,繪製點選計數。

建議

如果發生下列情況,請繼承 Windows Form 控制項:

  • 您需要的大部分功能與現有的 Windows Form 控制項相同。

  • 您不需要自訂的圖形化使用者介面,或者希望針對現有的控制項設計新的圖形化使用者介面

自訂控制項

建立控制項的另一種方式,是藉由繼承自 Control 來建立控制項,這種方式幾乎是從頭建置控制項。 Control 類別提供控制項所需的所有基本功能 (包括滑鼠和鍵盤處理事件),但不提供控制項特定的功能或圖形介面。

藉由繼承 Control 類別以建立控制項,比繼承 UserControl 或現有的 Windows Form 控制項更費心力。 因為您擁有許多實作的空間,所以產生的控制項可擁有比複合或擴充控制項還要大的彈性,並且可以量身訂做以符合真正的需求。

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

複製類比時鐘的外觀和行為的時鐘控制項,是自訂控制項的一個範例。 在此控制項中叫用 (Invoke) 了自訂繪製,使時鐘的指針依據內部 Timer 元件的 Tick 事件來移動。 如需詳細資訊,請參閱 HOW TO:開發簡單的 Windows Form 控制項

建議

如果發生下列情況,則自 Control 類別繼承:

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

  • 您需要實作無法從標準控制項取得的自訂功能

ActiveX 控制項

雖然 Windows Form 基礎結構已經最佳化以裝載 (Host) Windows Form 控制項,您仍然可以使用 ActiveX 控制項。 Visual Studio 中會支援這項工作。 如需詳細資訊,請參閱 HOW TO:將 ActiveX 控制項加入至 Windows Form

無視窗控制項

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

自訂設計經驗

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

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

請參閱

工作

HOW TO:開發簡單的 Windows Form 控制項

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

概念

開發複合 Windows Form 控制項

其他資源

使用 .NET Framework 開發自訂的 Windows Form 控制項

擴充設計階段支援