当窗口大小改变时,自动调整TableLayoutPanel行的大小

7

我有一个简单的1x3 TableLayoutPanel。我想要实现一个非常简单的功能:当窗口大小改变时,只调整中间一行的大小,而保持顶部和底部行不变。我尝试了一些合理的方式,比如设置固定的顶部和底部行大小以及自动调整中间行的大小。但是不幸的是,它却调整了底部行的大小。

// 
// tableLayoutPanel1
// 
this.tableLayoutPanel1.ColumnCount = 1;
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
this.tableLayoutPanel1.Controls.Add(this.topPanel, 0, 0);
this.tableLayoutPanel1.Controls.Add(this.middlePanel, 0, 1);
this.tableLayoutPanel1.Controls.Add(this.bottomPanel, 0, 2);
this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
this.tableLayoutPanel1.RowCount = 1;
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 140F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 24F));
this.tableLayoutPanel1.Size = new System.Drawing.Size(1102, 492);
this.tableLayoutPanel1.TabIndex = 19;

所有内部面板都设置了Dock为Fill和默认锚点。我做错了什么?
3个回答

11

将中间行改为100%,这将告诉系统中间行将填补任何留下的间隙。 因此,请更改此内容(我认为这是您的designer.cs文件):

this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());

至:

this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));

请查看MSDN中的TableLayoutPanel.RowStyle

  1. 首先考虑设置了绝对高度的行,并分配它们的固定高度。
  2. 将AutoSize设置为行会根据其内容大小调整行尺寸。
  3. 剩余空间将在设置了百分比高度的行之间分配。

2

只需为第一行和第三行设置绝对大小:

tableLayoutPanel1.RowStyles[0].Height = 100;
tableLayoutPanel1.RowStyles[0].SizeType = SizeType.Absolute;
tableLayoutPanel1.RowStyles[2].Height = 100;
tableLayoutPanel1.RowStyles[2].SizeType = SizeType.Absolute;

确保第二行(中间行)的 SizeType = SizeType.PercentHeight = 100。您的 Form 应该最大高度为 200。

1
我做了。
this.tableLayoutPanel1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
     this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
     this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));

通过设置锚点的顶部和底部,我确保如果调整大小,行将变得更大/更小,并且通过使第一行和第三行的大小绝对以及中间百分比大小,我确保只有中间部分会变得更大/更小。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接