TableLayoutPanel を使用して、クライアント領域を 3 行 (1 列のみ) に分割しています。上段と下段は高さを固定するように設計されています。それらにはヘッダーとフッターが含まれ、最初はそれぞれに静的テキストを含む子ラベル コントロールが含まれます (最初から)。中央の行は、残りの領域を埋めるように動的にサイズ変更する必要があります。この中央のペインには、最終的にリストビューが含まれます。管理されているパネル (ExplorerTableLayoutPanel) オブジェクトを引数として取るマネージャー クラスがあります。
public class ExplorerTableLayoutPanelManager
{
public ExplorerTableLayoutPanelManager(ExplorerTableLayoutPanel panel)
{
LayoutPanel = panel;
}
テーブル レイアウトの 3 つの行をそれぞれ作成する方法は 3 つあります。
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);
}
私が見ている問題は、最後の行が 30 として要求した固定行の高さを占めていることです。この部分は正しいです。ただし、最初の行と 2 番目の行は残りのスペースをそれらの間で均等に分割していますが、これは私が望むものではありません。ご覧のとおり、最後の行とまったく同じ方法で、最初の行の行の高さを明示的に 30 に設定しましたが、これは機能していないようです。2 行目 (中央) の RowStyle サイズは SizeType.AutoSize に設定されていますが、これは残りのスペースを使い切ることを意味していたので、サイズを明示的に設定しないでください。私は間違っているかもしれませんが、よくわかりません。