vb.net - 如何自定义从字符串数组动态创建的按钮的单击事件?

标签 vb.net winforms button dynamically-generated

这是我的代码:

Public Class Form2

Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    AddNewButton()

End Sub

Public Sub AddNewButton()

    Dim buttonTop As Integer = 100

    For Each item As String In Globals.candidates
        Dim btn As New System.Windows.Forms.Button()
        Dim Location As New Point(100, (buttonTop + 20))
        btn.Location = Location
        btn.Text = item
        btn.Width = 150
        AddHandler btn.Click, AddressOf Me.buttonClick
        Me.Controls.Add(btn)
        buttonTop += 20      
    Next

End Sub

Private Sub buttonClick()

    Dim result As Integer = MessageBox.Show(String.Format("Did you select {0} ?", ???????????), "Confirmation", MessageBoxButtons.YesNo)
    If result = DialogResult.Yes Then
        MessageBox.Show("Yes pressed")
    Else
        MessageBox.Show("No pressed")
    End If

End Sub
End Class

Globals.candidates 是一个全局字符串数组变量,它保存名称“LastName, FirstName”,加载表单时,我调用 AddNewButton() Sub 并为字符串数组中的每个项目创建按钮。没问题。

如果您在我的代码中看到“?????????”部分,我不知道如何引用动态创建的按钮的文本,以便我可以正确显示正确的“您是否选择了 thisButton.text”。

感谢任何帮助。

谢谢!

编辑:

根据建议更改代码:(工作)

Public Class Form2

Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    AddNewButton()

End Sub

Public Sub AddNewButton()

    Dim buttonTop As Integer = 100

    For Each item As String In Globals.candidates
        Dim btn As New System.Windows.Forms.Button()
        Dim Location As New Point(100, (buttonTop + 20))
        btn.Location = Location
        btn.Text = item
        btn.Width = 150
        AddHandler btn.Click, AddressOf Me.buttonClick
        Me.Controls.Add(btn)
        buttonTop += 20      
    Next

End Sub

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

    Dim btn As Button = DirectCast(sender, System.Windows.Forms.Button)
    Dim result As Integer = MessageBox.Show(String.Format("Did you select {0} ?", btn.Text), "Confirmation", MessageBoxButtons.YesNo)
    If result = DialogResult.Yes Then
        MessageBox.Show("Yes pressed")
    Else
        MessageBox.Show("No pressed")
    End If

End Sub

End Class

最佳答案

您需要在事件处理程序上放置正确的签名:

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

然后,您可以使用 sender 对象(这将是单击的按钮)

Dim button As Button = DirectCast(sender, System.Windows.Forms.Button)
Dim result As Integer = MessageBox.Show(String.Format("Did you select {0} ?", button.Text), "Confirmation", MessageBoxButtons.YesNo)

关于vb.net - 如何自定义从字符串数组动态创建的按钮的单击事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29286934/

相关文章:

vb.net - 每次我离开并重新进入类(class)时,Visual Basic 都会将我的变量重置为 0

vb.net - 将 AsyncCallback 与 BeginInvoke 结合使用时,为什么我会在回调方法中收到 "Cross-thread operation not valid exception"?

vb.net - VB.NET 中的“List(Of Byte() )' to ' Byte()”

c# - Region.IsVisible(PointF)对于大浮点值的性能非常慢

sql - 合并来自不同数据库的sqlite中的两个表

c# - 换行符未在文本框中正确显示

winforms - WinForms 的功能区 UI 控件

c# - 跟踪按钮点击次数

C# asp.net按钮点击不显示标签

html - 屏幕底部相对于其图像的位置按钮