Tôi đang sử dụng TableLayoutPanel để chia vùng khách hàng thành 3 hàng (chỉ có 1 cột). Các hàng trên cùng và dưới cùng được thiết kế có chiều cao cố định; chúng sẽ chứa một đầu trang và một chân trang mà ban đầu mỗi phần chứa một điều khiển nhãn con chứa văn bản tĩnh (chỉ để bắt đầu với). Hàng ở giữa nên được kích thước động để lấp đầy khu vực còn lại. Khung giữa này cuối cùng sẽ chứa một listview. Tôi có một lớp học quản lý mà mất như một cuộc tranh cãi bảng điều khiển (ExplorerTableLayoutPanel) đối tượng được quản lý:TableLayoutPanel: Không thể nhận hàng nội dung có kích thước chính xác
public class ExplorerTableLayoutPanelManager
{
public ExplorerTableLayoutPanelManager(ExplorerTableLayoutPanel panel)
{
LayoutPanel = panel;
}
Có 3 phương pháp mà tạo ra từng 3 hàng trong cách bố trí bảng:
private void AddHeaderRow()
{
const int headerHeight = 30;
LayoutPanel.RowStyles.Add(new RowStyle(SizeType.Absolute, headerHeight));
Label label = new Label();
label.BackColor = Color.AliceBlue;
label.BorderStyle = BorderStyle.None;
label.ForeColor = Color.LightGray;
label.TextAlign = ContentAlignment.MiddleRight;
label.Text = "Header Banner";
label.Dock = DockStyle.Fill;
float size = label.Font.SizeInPoints;
label.Font = new Font(label.Font.Name, size * 2);
const int column = 0, row = 0;
LayoutPanel.Controls.Add(label, column, row);
}
private void AddBodyRow()
{
LayoutPanel.RowStyles.Add(new RowStyle(SizeType.AutoSize));
Label label = new Label();
label.BorderStyle = BorderStyle.FixedSingle;
label.ForeColor = Color.LightGray;
label.TextAlign = ContentAlignment.MiddleCenter;
label.Text = "Content Under construction ...";
label.Dock = DockStyle.Fill;
float size = label.Font.SizeInPoints;
label.Font = new Font(label.Font.Name, size * 2);
const int column = 0, row = 1;
LayoutPanel.Controls.Add(label, column, row);
}
private void AddFooterRoow()
{
const int footerHeight = 30;
LayoutPanel.RowStyles.Add(new RowStyle(SizeType.Absolute, footerHeight));
Label label = new Label();
label.BackColor = Color.AliceBlue;
label.BorderStyle = BorderStyle.None;
label.ForeColor = Color.LightGray;
label.TextAlign = ContentAlignment.MiddleRight;
label.Text = "Footer Banner";
label.Dock = DockStyle.Fill;
float size = label.Font.SizeInPoints;
label.Font = new Font(label.Font.Name, size * 2);
const int column = 0, row = 2;
LayoutPanel.Controls.Add(label, column, row);
}
Các vấn đề tôi thấy là hàng cuối cùng đang chiếm chiều cao hàng cố định mà tôi đã yêu cầu là 30. Phần này là chính xác. Tuy nhiên, các hàng đầu tiên và thứ hai được chia tách không gian còn lại bằng nhau giữa chúng mà không phải là những gì tôi muốn. Như bạn có thể thấy, tôi đã thiết lập rõ ràng chiều cao hàng thành 30 cho hàng đầu tiên theo cách chính xác như được thực hiện cho hàng cuối cùng, nhưng điều này dường như không hoạt động. Hàng thứ 2 (giữa) có kích thước RowStyle của nó được đặt thành SizeType.AutoSize mà mặc dù tôi có nghĩa là sử dụng hết dung lượng còn lại, vì vậy đừng đặt kích thước rõ ràng. Tôi có thể sai nhưng tôi không chắc chắn.
Nó vỉa bạn đang mô phỏng "Dock" tài sản bố trí với một bảng. –