Visual Basic® 6.0 及其早期版本中的控件僅限于“復合”控件(由其他控件組成的控件),這種控件稱為 UserControl。在 Visual Basic 6.0 中編寫能夠在屏幕上呈現其特有可視外觀的控件幾乎是不可能的。
現在好了,可以使用功能強大的 Visual Basic .NET 編寫各種類型的可視控件了!不僅可以編寫復合的 UserControl,還能繼承現有的控件(如 TextBox)并擴展其新功能。更重要的是,還可以從頭編寫能夠呈現其特有界面的可視控件。
在本文中,我將從頭創建一個完整的可視控件,以說明 Visual Basic .NET 的后一種功能。該控件是一個“紅綠燈”- 一個包含三個圓(分別代表紅、黃、綠三個燈)的矩形。圖 1 顯示各個燈亮時該控件的外觀,控件的背景顏色設置為系統顏色 ControlDark。

圖 1:帶有三個 TrafficLight 控件的窗體,每個控件亮不同的燈。
我們稱它為 TrafficLight 控件,它可以通過代碼或讓用戶單擊燈來改變亮起的燈。
因為 TrafficLight 是一個可視的 Windows 窗體控件,它將繼承 System.Windows.Forms 命名空間中的 Control 類。這樣,它將具有很多預定義的屬性、方法和事件,包括控制其外觀的屬性,如 ForeColor、BackColor、Size 和 Location;還包括事件,如 MouseOver 和 Click。您可以查看 .NET 文檔,獲得 Control 類成員的完整列表。
紅綠燈也需要具有特殊的屬性和事件,如下所示:
| Status 屬性 | 確定亮起哪種顏色的燈。必須為以下三個枚舉值之一:
|
|---|---|
| BorderWidth 屬性 | 紅綠燈周圍邊框的寬度。 |
| StatusChanged 事件 | 當通過代碼或由用戶單擊不同的燈改變 Status 屬性的值時,觸發該事件。 |
由于這些成員不屬于 Control 基類,所以我們需要包括完整的代碼以處理它們。我們還需要繪制邊框和三個相應顏色的燈的代碼,以便在屏幕上繪制紅綠燈。最后,我們需要處理用戶單擊圓以更改亮起燈的操作,并在更改亮起的燈時更改 Status 屬性。
為了使本示例盡可能接近實際應用環境,我們還將包括能夠確保在 Visual Studio® .NET IDE 中更好地使用控件的代碼。我們為工具箱設置適當的圖標,并包括能夠使屬性更好地與各屬性窗口集成的邏輯。