Колонки менять строки/период программно (управления tablelayoutpanel)

У меня есть tablelayoutpanel. 2x2-2 колонки 2 строки.

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

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

Как?

2 ответов


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

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);
    }
}

В то время как я нахожу текущий проголосовавший ответ вполне адекватным, он также кажется немного более беспорядочным, чем нужно. Необходимо добавить элементы управления в tableLayoutPanel перед установкой их свойств.

Visual Studio (2013 и, вероятно, другие версии) покажет эти свойства как часть элемента управления. Когда на самом деле, они являются частью tableLayoutPanel.

объяснение:

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 / grid изменения.

если добавить два элемента управления два же расположение сетки программно, первый элемент управления в сетке сохраняет свое местоположение. Любой добавленный впоследствии элемент управления перемещается в следующий блок ячеек. Если добавлен "промежуток", он будет обрабатывать этот блок ячеек как используемый и продолжать поиск неиспользуемого блока ячеек.

Ex:метка1, метка2 и метка3 добавляются к 0,0.

  • метка1 будет появляются в 0,0
  • метка2: 0,1
  • метка3: 0,2

Ex 2: ярлык 1 имеет пядь строки 2.

  • метка1: 0,0
  • метка2: переехал в 0,2
  • метка3: 0,3

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