2016-07-19 3 views
2

У меня есть элемент управления TableLayoutPanel в Windows Form. Теперь у меня есть 4 панели управления в TableLayoutPanel как Panel1 в ячейке (0,0), Panel2 в ячейке (0,1), Panel3 в ячейке (1,0) и Panel4 в ячейке (1,1).Как изменить расположение элементов управления в элементе управления TableLayoutPanel во время выполнения в форме окна vb.net

Теперь я хочу переместить Panel4 на Panel1 и скрыть Panel1. Как это сделать?

ответ

2

Если переместить панели из 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 
+0

Попробуйте использовать код, пожалуйста. Вы можете сказать, что это неверно, потому что вы не говорите точно, в какой строке и столбце должен появиться элемент управления. –

+0

Это рабочий код @HansPassant - я изменил первый абзац, поэтому теперь он должен быть более четким. –

+0

hi @ matt-wilko, он работает, но почему я держу элементы управления в стороне от TableLayoutPanel. Я хочу сохранить элементы управления в TableLayoutPanel при просмотре дизайна. Теперь во время выполнения я хочу перемещать элементы управления в любом месте в TableLayoutPanel. –

2

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 «s или вызвать Hide метод на контроле.

+0

hi @TnTinMn, он работает нормально. –

Смежные вопросы