2008-12-01 39 views
0

在.net中有一種方式來泛指控件(所以如果控件名稱改變等),你沒有問題。如何在其事件中引用控件? (不使用它的名字)

即,「me」關鍵字的對象級版本。

所以,我想在下面的例子中使用通用的而不是RadioButton1。

Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object, _ 
     ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged 

     If RadioButton1.Checked Then 
      Beep() 

End Sub 

回答

3

讓我們看看,如果我還記得VB.NET:

Dim rb as RadioButton = sender 
If rb.Checked Then... 
8

是的,「sender」參數是觸發事件的控件。

+0

您需要將其轉換爲特定類型,例如單選按鈕 – Gishu 2008-12-01 19:04:30

2

您可以選擇事件的名稱。您可以使用「事件」窗口(屬性窗口旁邊)或代碼內部執行此操作。你一直選擇這個名字。你可以簡單地使用「checkedEvent」。

this.checkbox.EventXYZ += new EventXZY(checkedEvent); 

在此方法中,你可以使用發件人對象,並將其以(複選框),然後使用它的屬性...和行爲......

public ... checkedEvent(object sender,...) 
    ((RadioButton)sender)..... 

你可以找到一個偉大的article那將解釋大家在VB.NET與一個TextBox事件(他有幾個文本框,只有1個的方法來處理他們所有:

alt text http://clip2net.com/clip/m12122/1228156822-clip-4kb.png

2

如果你只是有觸發事件處理的一個控制再有什麼理由概括的代碼,所以你不必引用實際名稱的按鈕。如果控件不存在,編譯將會中斷。

但是,如果您有多個控件掛鉤到相同的事件處理程序,那麼您應該使用傳遞給處理程序的第一個參數(發件人)。現在,您可以對觸發事件的任何控件執行一些通用操作:

Private Sub rbtn_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) 
    Dim rbtn As RadioButton = TryCast(sender, RadioButton) 
    If rbtn IsNot Nothing Then 
        If rbtn.Checked Then 
            rbtn.Text = rbtn.Text & "(checked)" 
        End If 
    End If 
End Sub 
相關問題