2010-05-04 4 views
15

У меня есть панель tablelayoutpanel. 2x2 - 2 столбца 2 ряда.Изменение диапазона строк/столбцов программным способом (tablelayoutpanel)

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

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

Как?

ответ

25

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

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

отличный код. Visual Studio Designer вводит меня в заблуждение. Я смотрел в свойствах button1, пытался наложить кнопку1 на элемент toolstippanel и так далее ... спасибо! –

+0

, если вы изучили Form.Designer.cs вместо визуального дизайнера, у вас было найденное решение. ;-) – Oliver

+1

Я знаю, что это старый пост, но я хотел бы указать, что вам не нужно выполнять «условия yoda» в C#, поскольку если инструкции строго типизированы. (И я верю, что если вы делаете ошибку с булевыми элементами и ставите назначение вместо сравнения, оно генерирует предупреждение компилятора, в отличие от ошибки, которую он генерирует с любым другим типом.) – MiffTheFox

2

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

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 и Метка3 добавляют к 0,0.

  • label1 появится в 0,0
  • label2: 0,1
  • LABEL3: 0,2

Пример 2: метка 1 имеет размах строк от 2.

  • label1: 0,0
  • label2: переселены 0,2
  • LABEL3: 0,3

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

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