It appears you have set the row to be deleted as the last row in your code above
This line is the problem
row = TableLayoutPanel1.RowCount - 1
Steps you should follow:
a. Loop through all Controls in TableLayoutPanel1
b. Find checkbox and see if it is checked
c. Get its position (row and Column) using GetPositionFromControl
d. Get the row
e. Delete the control
f. Delete the row
DIM RowToDelete as Integer
For Each CNTRL in TableLayoutPane1.Controls
If (TypeOf CNTRL Is CheckBox) AndAlso DirectCast(CNTRL, CheckBox).Checked Then
RowToDelete = TableLayoutPanel1.GetPositionFromControl(CNTRL).Row
TableLayoutPanel1.Controls.Remove(CNTRL)
Exit For
End If
Next
TableLayoutPanel1.RowStyles.RemoveAt(RowToDelete)
TableLayoutPanel1.RowCount -= 1
Hope this helps.