The solution for this would be as follow
Private Sub Label1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Label1.Click
Dim myTextBox As New TextBox
Dim myButton As New Button
AddHandler myButton.Click, AddressOf ButtonClick
myTLP.Controls.Add(myTextBox, 1, 0)
myTLP.Controls.Add(myButton, 2, 0)
End Sub
Private Sub ButtonClick(ByVal sender As Object, ByVal e As EventArgs)
Dim tmpbtn As Button = TryCast(sender, Button)
If Not tmpbtn Is Nothing Then
For i As Integer = 0 To myTLP.ColumnCount - 1
Dim tmpctr As Control = _
myTLP.GetControlFromPosition(i, myTLP.GetRow(tmpbtn))
If Not tmpctr Is Nothing Then myTLP.Controls.Remove(tmpctr)
Next
End If
End Sub
Add the same handler for each of the created button and it will delete accordingly.
Just make sure you set the ColumnCount and RowCount for the TableLayoutPanel.