我在Windows Form中有一个TableLayoutPanel控件。现在我在该控件中有4个Panel控件,其中Panel1位于单元格(0,0),Panel2位于单元格(0,1),Panel3位于单元格(1,0),Panel4位于单元格(1,1)。
现在我想将Panel4移动到Panel1的位置并隐藏Panel1。如何操作?
TableLayoutPanel
支持 GetCellPosition
和 SetCellPosition
方法来与子控件位置交互。Private Shared Sub SwapPosition(c1 As Control, c2 As Control)
Dim tlp As TableLayoutPanel = TryCast(c1.Parent, TableLayoutPanel)
If tlp Is c2.Parent AndAlso tlp IsNot Nothing Then
Dim posC1 As TableLayoutPanelCellPosition = tlp.GetCellPosition(c1)
Dim posC2 As TableLayoutPanelCellPosition = tlp.GetCellPosition(c2)
tlp.SetCellPosition(c2, posC1)
tlp.SetCellPosition(c1, posC2)
End If
End Sub
如果要隐藏子控件,可以从TableLayoutPanel
的控件集合中删除它,或者调用该控件的Hide
方法。
如果您在设计时将面板移出 TableLayoutPanel(即将它们移动到表单表面的某个位置),然后在运行时将它们添加到 TLP 控件中,您可以随意添加和删除控件。
这取决于布局面板的每个方格都被占用,因为当您调用 Controls.Add 时,它会停靠到下一个可用空间。
因此,在运行时添加所有面板:
TableLayoutPanel1.Controls.Add(Panel1)
TableLayoutPanel1.Controls.Add(Panel2)
TableLayoutPanel1.Controls.Add(Panel3)
TableLayoutPanel1.Controls.Add(Panel4)
Private Sub SwapControls(aTableLayoutControl As TableLayoutPanel, firstControl As Control, secondControl As Control)
aTableLayoutControl.Controls.Remove(firstControl)
aTableLayoutControl.Controls.Remove(secondControl)
aTableLayoutControl.Controls.Add(secondControl)
aTableLayoutControl.Controls.Add(firstControl)
End Sub
SwapControls(TableLayoutPanel1, Panel1, Panel3)
Panel1.Visible = False