我有一些代码,我有一个动态创建的数组或按钮,上面有员工图片,以及员工的姓名。我添加了一个处理程序来处理来自任何按钮的任何按钮点击。我被困的地方是,如果你看下面的代码,它一切正常,如果你点击任何一个按钮,你会得到" 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
答案 0 :(得分: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