通常,VB.NET程式員會建立一個靜態設計,而這一設計可以為程式的應用提供所需的一切。但是,在某些情況下,程式員或許不能夠事先預計每種需求,這裡就需要用到動態代碼產生了。
本文的討論也將著眼於這兩種情況。首先是當程式員需要動態建立一個控制項並將代碼附著於控制項之上時。例如,你或許想建立一個連結清單,但是不知道需要建立連結的數量或是連結中會出現什麼樣的資料。第二種是當程式員需要定義代碼以反映出特殊需求的時候。例如,你或許要執行能反映使用者系統配置的代碼。
類似上述的情況當然不會每天都上演。事實上,它們只在非常情況下才出現。然而,作為程式員,仍然要意識到.NET為解決動態情形提供了方案。有了正確的技巧,你就可以寫出能靈活處理動態情況的應用程式了。
使用動態控制項
許多程式員總會遇到需要動態建立控制項的時候。我們所展示的例子中程式員向FlowLayoutPanel中添加了LinkLabels。或許你可以個這樣的設定來記錄和儲存常用的URL,檔案,網路地址或是其他資源所在位置的數值。這一樣本沒有真正儲存連結,但是你可以使用XML序列化功能來實現儲存。
每次當使用者點擊Test按鈕時,範例程式碼就會動態建立一個新的LinkLabel控制項。真正的示範代碼並不複雜。例一就展示了建立這類控制項以及將控制項放入FlowLayoutPanel,lstLabel中通常所需要做的一切。
例一:向FlowLayoutPanel中添加新的連結
Private Sub btnTest_Click()
Handles btnTest.Click
' Create a link.
Dim NewLink As LinkLabel =
New LinkLabel()
' Add some properties to it.
NewLink.Text = DateTime.Now
.ToLongTimeString()
' Set the click event handler.
AddHandler NewLink.Click,
AddressOf NewLink_Click
' Place the button on the form.
lstLinks.Controls.Add(NewLink)
End Sub
如你所料,該代碼開始的時候建立了一個新的LinkLabel並為其賦予了一些值。這一樣本使用的是目前時間。你的代碼或許能夠對某一真實資源進行訪問。
請注意該代碼也向連結的Click事件中指定了一個處理常式。你必須使用樣本中的AddHandler技巧,因為普通的Handles關鍵詞路徑不起作用。一方面,設計應用程式的時候你並不清楚控制項的名稱。即便你為控制項指定了一個名稱,你也不知道使用者要建立的控制項數量,所以我們沒有辦法清楚會有多少處理常式會被建立。處理常式的代碼與控制項代碼類似,因此沒有必要建立多個處理常式。用於這個樣本的處理代碼見例二。例二:處理動態控制項點擊事件
Private Sub NewLink_Click( _
ByVal sender As System.Object, ByVal e As System.EventArgs)
' Verify that you actually have a LinkLabel
If Not sender.GetType() Is GetType(LinkLabel) Then
MessageBox.Show("Wrong control type provided!")
Return
End If
' Convert the input sender to a Button.
Dim ThisLink As LinkLabel = sender
' Show that we have the correct button.
MessageBox.Show("You created this link at: " + ThisLink.Text)
End Sub