Хотя я нахожу текущий ответ с положительным голосом вполне адекватным, он также выглядит немного более грязным, чем нужно. Вы должны добавить элементы управления в tableLayoutPanel перед установкой их свойств.
Visual Studio (2013 и, вероятно, другие версии) покажет эти свойства как часть элемента управления. На самом деле они являются частью таблицы LayoutPanel.
Пояснение:
tableLayoutPanel.Controls.Add(**control**, x, y)
tableLayoutPanel.SetColumnSpan(**control**, '# of cols to span')
Пример:
tableLayoutPanel1.Controls.Add(**button1**, 0, 0);
tableLayoutPanel1.SetColumnSpan(**button1**, 2);
tableLayoutPanel1.SetRowSpan(**button1**, 3);
Результат: кнопка, которая «занимает» это место. (При условии, что он достаточно большой, чтобы покрыть область. Даже если он не «покрывает» пространство, он все равно «зарезервирует» его.)
O O X X X
O O X X X
O O X X X
X X X X X
X X X X X
Установка диапазона больше размера сетки будет ..:
НЕ меняйте размер сетки.
НЕ обрезать / редактировать номер по размеру сетки.
НЕ выдает ошибку при компиляции.
Он будет действовать / работать так, как если бы интервал был установлен на максимальный размер текущей сетки (tableLayoutPanel). Это актуально только в случае изменения размера TLP / сетки.
Если программно добавить два элемента управления в одно и то же местоположение сетки, первый элемент управления в сетке сохраняет свое местоположение. Любой впоследствии добавленный элемент управления перемещается в следующий блок ячейки. Если добавлен «span», он будет обрабатывать этот блок ячеек как использованный и продолжать поиск неиспользуемого блока ячеек.
Пример: label1 , label2 и label3 добавляются к 0,0.
- label1 появится в 0,0
- label2 : 0,1
- label3 : 0,2
Пример 2: метка 1 имеет диапазон строк 2.
- label1 : 0,0
- label2 : перемещено на 0,2
- label3 : 0,3
После того, как вы выбрали правильную точку сетки и пролеты, вы можете дополнительно оптимизировать макет, используя свойства закрепления и привязки.