2013-07-18 37 views
5

Tôi có một đơn giản 1x3 TableLayoutPanel. Tôi muốn đạt được một điều rất đơn giản: Khi cửa sổ được thay đổi kích thước, thay đổi kích thước hàng giữa và giữ các hàng trên cùng và dưới cùng giống nhau. Tôi đã thử làm điều logic, đó là thiết lập kích thước hàng đầu và dưới cùng cứng nhắc và tự động cho hàng giữa. Thật không may, đó là hàng dưới cùng mà thay đổi kích thước.Tự động thay đổi kích thước hàng TableLayoutPanel khi cửa sổ được thay đổi kích thước

// 
// 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; 

Tất cả các bảng bên trong đều có Dock được đặt thành Fill và neo mặc định. Tôi đang làm gì sai?

Trả lời

8

Thay đổi hàng ở giữa thành 100% phần trăm, điều này sẽ cho hệ thống biết rằng hàng giữa sẽ lấp đầy bất kỳ khoảng trống nào. Vì vậy, thay đổi này (tôi tin rằng nó designer.cs của bạn):

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

tới:

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

Kiểm tra TableLayoutPanel.RowStyle from MSDN:

  1. Rows với RowStyle thiết lập để Absolute được coi là đầu tiên, và độ cao cố định của chúng được phân bổ.
  2. Hàng có RowStyle được đặt thành Tự động kích thước có kích thước nội dung của chúng.
  3. Không gian còn lại được phân chia giữa các hàng vớiRowStyle được đặt thành Phần trăm.
1

Đơn giản chỉ cần thiết lập kích thước tuyệt đối cho hàng đầu tiên và thứ ba:

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

Để chắc chắn thứ hai (giữa) hàng nên có SizeType = SizeType.PercentHeight = 100. Form của bạn nên có tối đa Height của 200.

1

tôi đã làm

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

và nó làm việc ... bằng cách thiết lập các đầu neo và dưới tôi chắc chắn rằng nếu thay đổi kích thước hàng sẽ phát triển lớn hơn/nhỏ hơn, và bằng cách làm cho các hàng đầu tiên và thứ 3 có kích thước tuyệt đối và kích thước phần trăm trung bình tôi đảm bảo chỉ có phần giữa sẽ lớn hơn/nhỏ hơn