Изменить диапазон строки / столбца программно (tablelayoutpanel) - PullRequest
15 голосов
/ 04 мая 2010

У меня есть настольная игровая панель. 2x2 - 2 столбца, 2 строки.

Например, я добавил кнопку button1 в 1-й строке второго столбца. button1 имеет свойство закрепления, установленное на Fill. VS Designer позволяет установить свойства диапазона столбца / строки для button1 .

Я хочу, чтобы доступность изменяла свойство диапазона строки на button1 программно , чтобы он мог заполнить весь второй столбец (1 строка и вторая строка) и доступность для его возврата. 1015 *

Как?

Ответы [ 2 ]

26 голосов
/ 04 мая 2010

А как насчет этого кода?

private void button1_Click(object sender, EventArgs e)
{
    var control = sender as Control;

    if(control == null)
        return;

    if (1 == tableLayoutPanel1.GetRowSpan(control))
    {
        tableLayoutPanel1.SetRowSpan(control, 2);
    }
    else
    {
        tableLayoutPanel1.SetRowSpan(control, 1);
    }
}
4 голосов
/ 28 сентября 2015

Хотя я нахожу текущий ответ с положительным голосом вполне адекватным, он также выглядит немного более грязным, чем нужно. Вы должны добавить элементы управления в 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

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

...