2009-10-15 34 views
0

我正在製作一個程序,它可以動態地將對象(如按鈕或複選框)添加到表單中。動態添加和使用vb.net中的類型

對於每個實例,都會添加一個處理程序,以便爲每個對象的Click事件調用某個函數。

現在,當該處理程序被調用時,如何操作觸發Click事件的對象? Sender對象在這裏沒用,因爲我無法更改位置,文本,父項,完全沒有。

由於對象是動態創建的,它們的實例名稱不幸總是相同,因此我不能簡單地執行button1.Text =「Button 1」之類的操作。

我真的不想爲每個類型創建一個新的子例程,因爲要執行的操作是相同的......所以我如何操作這些對象?

在最後的計數中,有27種不同的對象類型正在被操作,並且我想要被一個子操作。

感謝您的幫助!

+0

asp.net or winforms? – 2009-10-15 23:59:53

+0

winforms,但najmeddine已經得到它。無論如何感謝喬爾! – Cyclone 2009-10-16 00:00:53

回答

3

投發件人Control &,你可以做你想做的(所有的對象都控制對吧?)

+0

我試圖直接投射到對象的類型,那沒有工作大聲笑。謝謝,我甚至沒有意識到有一個控制類型在所有lol .... – Cyclone 2009-10-15 23:59:37

1

如果您知道調用的處理程序輸入的類型,那麼你可以使用類型轉換來解決您的問題:

Sub General_OnClick(ByVal sender As Object, ByVal e As EventArgs) 
    Dim b As Button = sender 
    b.Text = "Hello World!" 
End Sub 

如果不這樣做,你似乎沒有你,你可以嘗試改爲Control,這可能給你足夠的控制,取決於你需要做什麼。如果沒有,你總是可以這樣做:

Sub General_OnClick(ByVal sender As Object, ByVal e As EventArgs) 
    If TypeOf sender Is Button Then 
     Dim b As Button = sender 
     b.Text = "Hello World!" 
    Else If TypeOf sender Is TextBox Then 
     Dim tb As TextBox = sender 
     tb.Text = "Goodbye cruel world!" 
    End If 
End Sub 

編輯:更新翻譯成VB.Net

+0

其VB.net,而不是c# – Cyclone 2009-10-15 23:58:39

+0

哎呀,沒有刷新一會兒,並沒有看到你的編輯 – Cyclone 2009-10-16 00:00:12

+0

謝謝丹尼爾。 @Cyclone:我使用VB.NET已經有好幾年了,我很高興看到這個事實。事實上,這是實現它的最好方式,但沒有人在VB中以這種方式回答它,所以我認爲C#中的答案總比沒有答案好。 – 2009-10-16 00:00:55

3

聽起來好像發件人是你想要的,因爲這將是觸發Click事件的對象。你只需要找出一種方法將其轉換爲所需的類型。

如果你只是操縱的位置,文字和父母,再澆注到控制就足夠了:

Dim c As Control = CType(sender, Control) 

否則,你將需要轉換的具體類型,這意味着你將需要每個類型不同的程序。

另一種選擇是打開後期綁定,我相信VB是Option Strict Off。然後,即使沒有投射,也可以引用控件屬性 - .NET將在運行時查找屬性(並且,如果該屬性不存在,將會發出異常)。

+0

我會使用TryCast()而不是CType,但爲+1控制,以控制 – 2009-10-16 00:00:44