Button Array - 如何将参数传递给共享处理程序

时间:2016-07-01 11:45:19

标签: vb.net visual-studio

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

1 个答案:

答案 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