有没有办法从TableLayoutPanel的一行中删除所有控件?
问题描述:
我动态地为TableLayoutPanel生成控件。我在每一行都有一个删除按钮。当我点击时,该行必须被删除。有没有办法从TableLayoutPanel的一行中删除所有控件?
Dim removeBtn As New Button
AddHandler removeBtn.Click, AddressOf DeleteRow
tlp.Controls.Add(removeBtn, 5, rowCount)
我还没有显示代码来添加类似于上面的文本框。我可以得到点击按钮的行号。使用这个,如何从这一行中删除所有控件。
Private Sub DeleteRow(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim currentRow As Integer = CType(CType(sender, Button).Parent, TableLayoutPanel).GetRow(CType(sender, Button))
'Using this currentRow, how to delete this Row
End Sub
答
基本上,你必须:
- 从该行获得的控制列表,并从TLP
- 删除它们从TLP
- 将新行删除相应的行样式删除之后每行中每个控件的索引
- 减少RowCount
这里是VB.NET代码做同样的事情。
Public Sub RemoveRow(ByRef panel As TableLayoutPanel, ByRef rowIndex As Integer)
panel.RowStyles.RemoveAt(rowIndex)
Dim columnIndex As Integer
For columnIndex = 0 To panel.ColumnCount - 1
Dim Control As Control = panel.GetControlFromPosition(columnIndex, rowIndex)
panel.Controls.Remove(Control)
Next
Dim i As Integer
For i = rowIndex + 1 To panel.RowCount - 1
columnIndex = 0
For columnIndex = 0 To panel.ColumnCount - 1
Dim control As Control = panel.GetControlFromPosition(columnIndex, i)
panel.SetRow(control, i - 1)
Next
Next
panel.RowCount -= 1
End Sub
这是一个C#扩展方法,将为您做到这一点。
public static void RemoveRow(this TableLayoutPanel panel, int rowIndex)
{
panel.RowStyles.RemoveAt(rowIndex);
for (int columnIndex = 0; columnIndex < panel.ColumnCount; columnIndex++)
{
var control = panel.GetControlFromPosition(columnIndex, rowIndex);
panel.Controls.Remove(control);
}
for (int i = rowIndex + 1; i < panel.RowCount; i++)
{
for (int columnIndex = 0; columnIndex < panel.ColumnCount; columnIndex++)
{
var control = panel.GetControlFromPosition(columnIndex, i);
panel.SetRow(control, i - 1);
}
}
panel.RowCount--;
}
答
除了约翰和emaillenin的答案,你应该改变以下行
panel.SetRow(control, i - 1);
对此
if (control != null) panel.SetRow(control, i - 1);
空字段也跨区控制将在这里如果孤单抛出一个错误没有检查为空。
答
为什么这么多的勤劳...... 使用 tableLayoutpanel1.Controls.Clear()
这将清除表面板
+5
这是*不* OP要求做的事情。 – 2013-02-12 06:18:33
@emaillenin的内容:谢谢你的翻译到VB.NET – 2011-06-02 15:27:00
为什么人们必须删除RowStyle? – sammarcow 2012-02-09 16:08:33