How to get sender column and row number?

452 views Asked by At

I have a TableLayoutPanel(tlp_printing_content_layer2) with 1 column and 2 row, each cell also contain 1 button, How can i get the column and cell number when button clicked? Because i want to replace the button with another 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 and sender.row is not work... or is that other way to replace the button with other usercontrol?

1

There are 1 answers

0
Andrew Mortimer On BEST ANSWER

You can iterate through the columns and rows until you find a Button matching the name of your clicked 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