詳述:自訂使用者控制項
更新:2007 年 11 月
在這個課程中,您將學習如何自訂使用者控制項 (User Control),讓它更有用。
加入標籤
在上一個課程中,您測試過 [NamesControl] 使用者控制項,並發現它的運作方式如同預期。不過,您可能也注意到一些可以改善的方面。例如,哪個文字方塊中應該輸入哪個名稱並不明顯,而且無法確定使用者是否都輸入了三個名稱。
為了讓使用者控制項更有用,您可以加入識別每個文字方塊的標籤。您可以將這些標籤的文字設定為:「名字」、「中間名」和「姓氏」,不過如果您稍後決定要改用「中間名縮寫」時,該怎麼辦?最好是為標籤文字建立屬性,以便您可在設計階段變更文字並為每個屬性提供預設值。
試試看!
若要自訂使用者控制項
開啟您在上一個課程中所建立的 NamesUserControl 專案。如果您並未儲存該專案,就必須先回到上一個課程:測試使用者控制項,並完成該課程中的程序。
在 [方案總管] 中,選取 [NamesControl.vb],然後在 [檢視] 功能表中選擇 [設計工具]。
從 [工具箱] 中,將三個 [Label] 控制項拖曳到設計工具中,並在每個 [TextBox] 上都放置一個控制項。
在 [方案總管] 中,選取 [NamesControl.vb],然後在 [檢視] 功能表中選擇 [程式碼]。
在 [程式碼編輯器] 中,加入下列程式碼,以便建立標籤文字的屬性。
Private text1 As String = "First Name" Property Label1Text() As String Get Return text1 End Get Set(ByVal value As String) text1 = value Label1.Text = text1 End Set End Property Private text2 As String = "Middle Name" Property Label2Text() As String Get Return text2 End Get Set(ByVal value As String) text2 = value Label2.Text = text2 End Set End Property Private text3 As String = "Last Name" Property Label3Text() As String Get Return text3 End Get Set(ByVal value As String) text3 = value Label3.Text = text3 End Set End Property
請注意,此程式碼會為標籤文字宣告三個 Private 變數,而且這些宣告含有要顯示的預設值。
在 [程式碼編輯器] 中,從左側下拉式方塊中選取 [(NamesControl 事件)],然後從右側下拉式方塊中選取 [Load] 事件。
將下列程式碼加入至 NamesControl_Load 事件處理常式:
' Initialize the three labels Me.Label1.Text = Label1Text Me.Label2.Text = Label2Text Me.Label3.Text = Label3Text
在 [建置] 功能表上,選擇 [建置方案]。
在 [方案總管] 中,選取 [Form1.vb],然後在 [檢視] 功能表中選取 [設計工具]。
確定標籤是否具有預設文字。您可以嘗試在 [屬性] 視窗中變更 [Label1Text] 屬性,並確定它是否也在控制項中變更。
在 [檔案] 功能表上選擇 [關閉],即可關閉表單設計工具。
加入驗證
另一種有用的自訂方式就是加入程式碼,以便「驗證」輸入的項目,並確定輸入的項目是否正確。您可以為整個使用者控制項撰寫驗證程式碼,而不用分別驗證每個 [TextBox] 控制項。
大部分控制項都有焦點從控制項移開時引發的 Validating 事件,而這就是您將輸入驗證程式碼的位置。在此範例中,您將會想要撰寫程式碼,以便確定每個文字方塊都含有名稱。
如果一或多個文字方塊是空白的,您將會想要顯示訊息方塊,提醒使用者輸入名稱。您可以公開 (Expose) 含有預設訊息的屬性。這樣一來,控制項的使用者就可以將訊息變更為他們想要的內容。
此外,控制項的使用者可能不需要中間名,所以您也會想要加入 Boolean 屬性,以便關閉 [MiddleName] 文字方塊的驗證。
試試看!
若要加入驗證
在 [程式碼編輯器] 中,為兩個屬性加入與驗證相關的程式碼:一個是用來指定是否需要中間名,另一個則是用來指定驗證失敗時要顯示的訊息。
Private required As Boolean = True Property MiddleNameRequired() As Boolean Get Return required End Get Set(ByVal value As Boolean) required = value End Set End Property Private errormessage As String = "Please enter your name." Property ValidationErrorMessage() As String Get Return errormessage End Get Set(ByVal value As String) errormessage = value End Set End Property
在 [程式碼編輯器] 中,從左側下拉式方塊中選取 [(NamesControl 事件)],然後從右側下拉式方塊中選取 [Validating] 事件。
將下列程式碼加入至 NamesControl_Validating 事件處理常式:
If MiddleNameRequired = True Then If FirstName.Text = "" Or MiddleName.Text = "" Or _ LastName.Text = "" Then MsgBox(ValidationErrorMessage) End If Else ' Middle name isn't required. If FirstName.Text = "" Or LastName.Text = "" Then MsgBox(ValidationErrorMessage) End If End If
在 [建置] 功能表上,選擇 [建置方案]。
在 [方案總管] 中,選取 [Form1.vb],然後在 [檢視] 功能表中選取 [設計工具]。
選取表單上的使用者控制項,並確定這兩個新的屬性是否都顯示在 [屬性] 視窗中。
從 [工具箱] 將 [Button] 控制項拖曳到表單內。
請按 F5 執行程式。
輸入您的名字和姓氏,但不輸入中間名。按一下按鈕,應該就會顯示含有 ValidationErrorMessage 的訊息方塊。
在 [檔案] 功能表上,選擇 [全部儲存],儲存您的工作。
後續步驟
在這個課程中,您學會如何自訂使用者控制項,讓它更有用。在下一個課程中,您將學習如何使用圖形繪製圖片和文字。
下一個課程:繪製圖片:使用圖形