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

How to get sender column and row number?

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

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 不起作用...或者是用其他用户控件替换按钮的其他方法?

您可以遍历列和行,直到找到 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