2012-03-30 3 views
2

Я добавил tableLayoutPanel в свой пользовательский элемент управления.размер столбца в таблицеLayoutPanel постоянно меняется в дизайнере

It is not docked or anchored. 
It has 4 columns and 4 rows. 
The items within each cell are docked fully within each cell. 

Настройки размера для столбцов следующие.

-Column 1 - Percent - 100% 
-Column 2 - Absolute - 25 
-Column 3 - Absolute - 35 
-Column 4 - Absolute - 25 

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

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

Как я могу получить эти настройки? Это сводит меня с ума!

Как запрошено здесь мой код дизайнера.

 // 
     // tableLayoutPanel1 
     // 
     this.tableLayoutPanel1.Anchor = System.Windows.Forms.AnchorStyles.None; 
     this.tableLayoutPanel1.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.OutsetDouble; 
     this.tableLayoutPanel1.ColumnCount = 4; 
     this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); 
     this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 25F)); 
     this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 35F)); 
     this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 25F)); 
     this.tableLayoutPanel1.Controls.Add(this.label8, 0, 0); 
     this.tableLayoutPanel1.Controls.Add(this.btnStartingUp, 3, 3); 
     this.tableLayoutPanel1.Controls.Add(this.txtOffset, 2, 3); 
     this.tableLayoutPanel1.Controls.Add(this.btnDurationUp, 3, 2); 
     this.tableLayoutPanel1.Controls.Add(this.label10, 0, 1); 
     this.tableLayoutPanel1.Controls.Add(this.btnFrequencyUp, 3, 1); 
     this.tableLayoutPanel1.Controls.Add(this.txtFrequency, 2, 1); 
     this.tableLayoutPanel1.Controls.Add(this.btnPowerUp, 3, 0); 
     this.tableLayoutPanel1.Controls.Add(this.label9, 0, 2); 
     this.tableLayoutPanel1.Controls.Add(this.txtLaserPower, 2, 0); 
     this.tableLayoutPanel1.Controls.Add(this.label7, 0, 3); 
     this.tableLayoutPanel1.Controls.Add(this.btnPowerDown, 1, 0); 
     this.tableLayoutPanel1.Controls.Add(this.btnFrequencyDown, 1, 1); 
     this.tableLayoutPanel1.Controls.Add(this.btnDurationDown, 1, 2); 
     this.tableLayoutPanel1.Controls.Add(this.btnOffsetDown, 1, 3); 
     this.tableLayoutPanel1.Controls.Add(this.txtDuration, 2, 2); 
     this.tableLayoutPanel1.Location = new System.Drawing.Point(61, 610); 
     this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(0); 
     this.tableLayoutPanel1.MaximumSize = new System.Drawing.Size(208, 98); 
     this.tableLayoutPanel1.Name = "tableLayoutPanel1"; 
     this.tableLayoutPanel1.RowCount = 4; 
     this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 21F)); 
     this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 21F)); 
     this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 21F)); 
     this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 21F)); 
     this.tableLayoutPanel1.Size = new System.Drawing.Size(208, 98); 
     this.tableLayoutPanel1.TabIndex = 168; 
+0

Не удалось воспроизвести его. Пожалуйста, напишите какой-нибудь код. – LarsTech

+0

Я все сделал в дизайнере, и это может произойти без меня, даже запустив мой код. Поэтому я могу опубликовать свой код дизайнера. В качестве теста я отправился к конструктору форм, набрав некоторую болтовню и удалив его, вернулся к дизайнеру и увидел, что он немного больше ... снова! – hrh

ответ

2

Не 100% уверен, но я был в состоянии дублировать проблему раз я поставил метки в TableLayoutPanel.

Когда были установлены метки AutoSize=true, это, по-видимому, вызывало проблему изменения размера столбца.

Когда я сменил все метки AutoSize=false, проблема исчезла, а размеры столбцов остались прежними.

Текстовые блоки также вмешиваются, поскольку они имеют свойство AutoSize (не видно в дизайнере или из кода) для управления высотой элемента управления. Установка текстового поля MultiLine=true не помогла.

Создание свой собственный TextBox, где я специально Установите AutoSize=false исправили проблему:

public class TextBoxEx : TextBox { 
    public TextBoxEx() { 
    this.AutoSize = false; 
    } 
} 
+0

ok Прошу прощения. – hrh

+0

, похоже, не помогло. = (Много раз я возвращаюсь к своему пользовательскому элементу управления, а последний столбец немного больше. Должен быть какой-то глупый параметр, который мне не хватает. – hrh

+0

Я думаю, что, возможно, выяснил, что мой пользовательский элемент управления, в котором находится TableLayoutPanel, AutoScaleMode ", установленный в« Шрифт », когда я изменил его на« Нет », проблема, похоже, исчезла. Я собираюсь дать ему немного времени, прежде чем я решит, что это решение. Спасибо за помощь! – hrh

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

  • Нет связанных вопросов^_^