C# 如何在vb.net windows窗体中运行时更改TableLayoutPanel控件中控件的位置

C# 如何在vb.net windows窗体中运行时更改TableLayoutPanel控件中控件的位置,c#,vb.net,C#,Vb.net,我有一个Windows窗体中的TableLayoutPanel控件。现在,在TableLayoutPanel中有4个面板控件,分别为单元格(0,0)中的Panel1、单元格(0,1)中的Panel2、单元格(1,0)中的Panel3和单元格(1,1)中的Panel4 现在我想在Panel1处移动Panel4并隐藏Panel1。如何执行此操作?如果在设计时将面板移出TableLayoutPanel(即将其移动到表单表面的某个位置),然后在运行时将其添加到tlp控件,则可以随意添加和删除控件 这取决

我有一个Windows窗体中的TableLayoutPanel控件。现在,在TableLayoutPanel中有4个面板控件,分别为单元格(0,0)中的Panel1、单元格(0,1)中的Panel2、单元格(1,0)中的Panel3和单元格(1,1)中的Panel4


现在我想在Panel1处移动Panel4并隐藏Panel1。如何执行此操作?

如果在设计时将面板移出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

TableLayoutPanel
支持与子控件位置交互的和方法

以下方法可用于交换两个子控件的位置

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
方法。

请尝试运行代码。你可以看出它是不正确的,因为你没有说控件需要显示在哪一行和哪一列。这是工作代码@HansPassant-我已经修改了第一段,所以现在应该更清楚了。嗨@matt wilko,它工作了,但为什么我要把控件放在TableLayoutPanel外面。我想在设计视图中保留TableLayoutPanel中的控件。现在,在运行时,我想将控件移动到TableLayoutPanel中的任何位置。@OmPrakashGupta-当我尝试在布局中使用控件时,删除它们并重新添加它们,将它们放回原来的位置,这样就解决不了问题