VB.net动态radiobuttons添加事件onclick

时间:2015-08-20 22:48:31

标签: vb.net events dynamic

你好,我有这个代码的问题...我从我的数据库ID和名称,我添加一个新的RadioButton中的每一行,但我怎么能用msgbox onclick获取id?代码是这样的:

Imports MySql.Data.MySqlClient

Public Class Order_info
 Dim conn As New MySqlConnection
 Dim sqlcommand As New MySqlCommand
 Dim regDate As Date = Date.Now()
 Dim strDate As String = regDate.ToString("dd MMMM yyyy")
 Dim dbdate As String = regDate.ToString("yyyy-M-dd")
 Dim RButton As RadioButton

 Private Sub Order_info_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Label1.Text = strDate
    connect()
 End Sub

 Private Sub connect()
    If Not conn Is Nothing Then conn.Close()
    conn.ConnectionString = String.Format("server={0};user id={1};
                                           password={2};database={3}; pooling=false",
                                          My.Resources.DatabaseIP,
                                          My.Resources.DatabaseUsername,
                                          My.Resources.DatabasePassword,
                                          My.Resources.DatabaseName)
    Try
        conn.Open()

        sqlcommand.Connection = conn
        Dim stm As String = "SELECT o.id,s.name,o.status FROM orders o INNER JOIN supplier s ON s.id = o.id_supplier where datetim = '" + dbdate + "'"
        Dim cmd As MySqlCommand = New MySqlCommand(stm, conn)
        Dim reader As MySqlDataReader = cmd.ExecuteReader()
        Dim x As Integer = 25
        Dim y, p As Integer
        Do While reader.Read()
            RButton = New RadioButton
            RButton.Name = "RadioButton" + x.ToString


            RButton.Text = reader.GetString(1)
            RButton.Top = y
            y += x
            p += 1
            If (reader.GetInt32(2) = 1) Then
                RButton.BackColor = Color.LightGreen
            End If
            Panel1.Controls.Add(RButton)
        Loop

        reader.Close()

    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
    conn.Close()
 End Sub
End Class

1 个答案:

答案 0 :(得分:2)

你为它们制作了一个事件处理程序 - 它们都使用相同的事件处理程序。您只需要从签名中转换sender对象,以告知选择了哪一个。我还想为每次迭代创建一个新的RadioButton对象。 FlowLayoutPanel会使RB更容易添加 - 您无需手动设置位置。

  Do While reader.Read()
        Dim RButton As New RadioButton
        RButton.Name = "RadioButton" + x.ToString
        RButton.Text = reader.GetString(1)
        RButton.Top = y
        y += x
        p += 1
        If (reader.GetInt32(2) = 1) Then
            RButton.BackColor = Color.LightGreen
        End If
        Addhandler RButton.Click, AddressOf RB_Clicked 
        'or use the CheckChanged event
        Panel1.Controls.Add(RButton)
    Loop
    '... rest of your code

事件处理程序:

Private Sub RB_Clicked(sender As Object, e As EventArgs)
  Dim rb As RadioButton = DirectCast(sender, RadioButton)
  'now rb is the one that was clicked
End Sub