2017-01-07 7 views
0

Ich habe eine TableLayoutPanel (tlp_printing_content_layer2) mit 1 Spalte und 2 Zeilen, jede Zelle enthält auch 1 Schaltfläche, Wie kann ich die Spalte und die Zellennummer erhalten, wenn die Schaltfläche geklickt? Weil ich mag die Schaltfläche mit einem anderen UsercontrolWie erhält man die Spalten- und Zeilennummer des Absenders?

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 und sender.row ersetzen wird nicht funktionieren ... oder ist, dass andere Art und Weise auf die Schaltfläche mit anderen Usercontrol zu ersetzen?

+0

Haben Sie immer nur zwei Reihen haben? –

+1

'dim pos als TableLayoutPanelCellPosition = tlp.GetCellPosition (button)' –

Antwort

1

Sie durch die Spalten und Zeilen, bis Sie laufen kann finden ein Button passend den Namen Ihres geklickt haben:

 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 
Verwandte Themen