2016-07-01 42 views
0

我有一些代碼,我有一個動態創建的數組或按鈕,上面有工作人員圖片以及工作人員的姓名。我添加了一個處理程序來處理任何按鈕點擊的按鈕。我堅持的是,如果你看下面的代碼,它一切正常,如果你點擊任何按鈕,你會得到「aha」測試信息。但我想單擊的工作人員的名字(所以btnArray(i).Text)傳遞給處理程序進行進一步處理。我試圖給處理程序添加一個ByVal參數,但是這導致了一個錯誤。什麼是正確的方法來做到這一點?正如我所說,下面的代碼適用於我,我只是在如何添加額外的功能的損失。按鈕數組 - 如何將參數傳遞給共享處理程序

 Dim btnArray(staffcount) As System.Windows.Forms.Button 
    For i As Integer = 1 To staffcount - 1 
     btnArray(i) = New System.Windows.Forms.Button 
     btnArray(i).Visible = True 
     btnArray(i).Width = 80 
     btnArray(i).Height = 101 
     btnArray(i).BackgroundImage = Image.FromFile(picloc(i)) 
     btnArray(i).BackgroundImageLayout = ImageLayout.Stretch 
     btnArray(i).Text = staffname(i) 
     Dim who As String 
     who = btnArray(i).Text 
     AddHandler btnArray(i).Click, AddressOf Me.theButton_Click 
     btnArray(i).ForeColor = Color.White 
     btnArray(i).TextAlign = ContentAlignment.BottomCenter 

     Dim fnt As Font 

     fnt = btnArray(i).Font 

     btnArray(i).Font = New Font(fnt.Name, 10, FontStyle.Bold) 


     FlowLayoutPanel1.Controls.Add(btnArray(i)) 
    Next i 
End Sub 

Private Sub theButton_Click() 
    MsgBox("aha") 

End Sub 

回答

2

首先,更正您的共享處理程序的簽名。

Private Sub theButton_Click(sender As Object, e As EventArgs) 

End Sub 

一旦完成獲取點擊按鈕的文本是一件簡單的事情。

Private Sub theButton_Click(sender As Object, e As EventArgs) 
    Dim textOfButtonClicked As String = DirectCast(sender, Button).Text 
    MessageBox.Show(textOfButtonClicked) 
End Sub 

發件人是被點擊的按鈕。由於簽名使用發件人的對象,因此DirectCast會將其更改爲按鈕,然後您可以訪問該按鈕的.Text屬性。

如果有要在點擊按鈕進行更多的操作,你可以這樣來做

Private Sub theButton_Click(sender As Object, e As EventArgs) 
    Dim whBtn As Button = DirectCast(sender, Button) ' get reference to button clicked 
    Dim textOfButtonClicked As String = whBtn.Text 
    MessageBox.Show(textOfButtonClicked) 
    'e.g. change the color 
    whBtn.BackColor = Color.LightYellow 
End Sub 
相關問題