各種自訂控制項
更新:2007 年 11 月
藉由 .NET Framework,可以開發及實作新的控制項。您可以透過繼承 (Inheritance) 擴充熟悉的使用者控制項以及現有控制項的功能,也可以撰寫自行執行繪製作業的自訂控制項。
決定要建立哪種類型的控制項,可能會令人感到困惑。這個主題強調您可繼承的各種控制項之間的差異,並提供您如何為專案選擇特定控制項的詳細資訊。
注意事項: |
---|
如需撰寫使用在 Web Form 上的控制項的詳細資訊,請參閱開發自訂的 ASP.NET 伺服器控制項。 |
基底控制項類別
Control 類別是 Windows Form 控制項的基底類別。它提供在 Windows Form 應用程式中進行視覺顯示所需的基礎結構。
Control 類別執行下列工作,在 Windows Form 應用程式中提供視覺顯示:
公開視窗控制代碼
管理訊息路由
提供滑鼠與鍵盤事件,及許多其他使用者介面事件
提供進階的配置功能
提供 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 不支援無視窗控制項。
自訂設計經驗
如果需要實作自訂的設計階段經驗,可以撰寫自己的設計工具。針對複合控制項,請從 ParentControlDesigner 或 DocumentDesigner 類別衍生您的自訂設計工具類別。針對擴充及自訂控制項,請從 ControlDesigner 類別衍生您的自訂設計工具類別。
使用 DesignerAttribute 將您的控制項與設計工具相關聯。如需詳細資訊,請參閱擴充設計階段支援和 HOW TO:建立採用設計階段功能的 Windows Form 控制項。
請參閱
工作
HOW TO:建立採用設計階段功能的 Windows Form 控制項