如何获取发件人列和行号?

时间:2017-01-07 05:51:08

标签: vb.net tablelayoutpanel

我有一个包含1列和2行的TableLayoutPanel(tlp_printing_content_layer2),每个单元格还包含1个按钮,如何在单击按钮时获取列和单元格编号?因为我想用另一个usercontrol替换该按钮

Private Sub btn_printer_Click(sender As Object, e As EventArgs) Handles btn_printer2.Click, btn_printer3.Click, btn_printer4.Click, btn_printer5.Click
    Dim currButton As Button = sender
    Dim prtp As New ctrl_PrinterPanel
    currButton.Dispose()   
    tlp_printing_content_layer2.Controls.Add(prtp, sender.column, sender.row)
End Sub

sender.column和sender.row不起作用......还是以其他方式用其他用户控件替换按钮?

1 个答案:

答案 0 :(得分:1)

您可以遍历列和行,直到找到与所点击按钮的名称相匹配的Button

     Private Sub PrintButton_Click(sender As Object, e As EventArgs) Handles PrintButtonOne.Click, PrintButtonTwo.Click

        'find which row was clicked
        Dim rowPos As Integer = whichRow(sender, e)

        'did we get a valid result?
        If rowPos > -1 Then

            'this is a dummy red control so that we can see it working
            Dim myNewControl As Panel = New Panel With {.BackColor = Color.Red}

            'remove the old
            TableLayoutPanel1.Controls.Remove(DirectCast(sender, Button))

            'add the new
            TableLayoutPanel1.Controls.Add(myNewControl, 0, rowPos)

        End If

    End Sub

    Private Function whichRow(sender As Object, e As EventArgs) As Integer

        'cast the button that was clicked
        Dim clickButton As Button = DirectCast(sender, Button)

        'look through all the cols and rows
        For colNum As Integer = 0 To TableLayoutPanel1.ColumnCount
            For rowNum As Integer = 0 To TableLayoutPanel1.RowCount
                'try cast the control we find at position colnum:rownum
                Dim testcontrol As Button = TryCast(TableLayoutPanel1.GetControlFromPosition(colNum, rowNum), Button)
                If Not testcontrol Is Nothing Then
                    'is this testcontrol the same as the click control?
                    If clickButton.Name = testcontrol.Name Then
                        Return rowNum
                    End If
                End If
            Next
        Next

        'not found or some other issue
        Return -1

    End Function