gpt4 book ai didi

TableLayoutPanel:无法正确调整内容行的大小

转载 作者:行者123 更新时间:2023-12-02 03:04:06 25 4
gpt4 key购买 nike

我正在使用 TableLayoutPanel 将客户区域分为 3 行(只有 1 列)。顶排和底排设计为固定高度;它们将包含一个页眉和一个页脚,最初每个页脚都包含一个包含静态文本的子标签控件(只是开始)。中间行的大小应动态调整以填充剩余区域。这个中间 Pane 最终将包含一个 ListView 。我有一个管理器类,它将被管理的面板 (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。这部分是正确的。然而,第一行和第二行在它们之间平均分配剩余空间,这不是我想要的。正如您所看到的,我已将第一行的行高明确设置为 30,其方式与最后一行的设置完全相同,但这似乎不起作用。第二行(中间)的 RowStyle 大小设置为 SizeType.AutoSize,我认为这意味着耗尽剩余空间,因此不要显式设置大小。我可能是错的,但我不确定。

最佳答案

我还没有测试过你的代码,但乍一看:

private void AddBodyRow()    
{
LayoutPanel.RowStyles.Add(new RowStyle(SizeType.AutoSize));
...

由于您想要填充剩余空间,因此不需要 SizeType.AutoSize,否则正文行将尝试缩小以适合标签,即使标签设置为 DockStyle.Fill。您想要的是通过使用 SizeType.Percent 使行填满所有空间:

private void AddBodyRow()    
{
LayoutPanel.RowStyles.Add(new RowStyle(SizeType.Percent, 100f));
...

关于TableLayoutPanel:无法正确调整内容行的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2186254/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com