如何调整TableLayoutPanel以按高度和重量包装内容? (动态)

问题描述 投票:-1回答:1

我创建了Form,将其用作弹出窗口。我需要此弹出窗口包含标题,进度栏和百分比文本。

因此,为此,我选择使用TableLayoutPanel作为表单中的控件。

有一个代码可以动态创建所有这些视图。为了进行测试,我现在使用标签代替真正的进度条实现。

public partial class TestFormDeleteIt : Form
    {
        public TestFormDeleteIt()
        {
            InitializeComponent();

            AutoSize = true;

            var flp = CreateTableLayoutPanel();
            Controls.Add(flp);
        }

        private Control CreateTableLayoutPanel()
        {
            // TableLayoutPanel Initialization
            var panel = new TableLayoutPanel
            {
                ColumnCount = 2,
                RowCount = 2,
                Dock = DockStyle.Fill
            };

            //Adjust column size in percentage
            panel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 70F));
            panel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 30F));

            //Adjust row size in percentage
            panel.RowStyles.Add(new RowStyle(SizeType.Percent, 50F));
            panel.RowStyles.Add(new RowStyle(SizeType.Percent, 50F));

            //Fill content
            panel.Controls.Add(
                new Label()
                {
                    Text = "state",
                    Dock = DockStyle.Fill
                }, 
                /*column*/ 0, /*row*/ 0);

            panel.Controls.Add(
                new Label()
                {
                    Text = "ProgressBar",
                    Dock = DockStyle.Fill
                },
                /*column*/ 0, /*row*/ 1);

            panel.Controls.Add(
                new Label()
                {
                    Text = "100%",
                    Dock = DockStyle.Fill
                }, 
                /*column*/ 1, /*row*/ 1);

            return panel;
        }
    }

因此,正如您所看到的,我创建了TableLayoutPanel,该行将其按行和列划分,并且为它持有的每个视图都设置了Dock = DockStyle.Fill,因为我不想使用硬编码修复大小。

我期望的是-每个视图都将您的单元格填充到tablelayout中,而根窗体本身将通过保留所有视图的talbelayout来调整您的大小。

但是实际上我得到了这个结果:

enter image description here

root表单不包装内容,它看起来具有固定的大小,并且tablelayout尝试填充此root表单的大小,但是我设置了AutoSize = true;,但它不会影响...

我在做什么错?

编辑

谢谢,@ Jimi现在看起来好多了

enter image description here

我也添加了

MinimumSize = new System.Drawing.Size(600, Height)

对于TLP,但问题是-如您所见,每一行都有最小高度。它看起来像每行之间的空间。为什么会发生?

EDIT2

[我想指出的是,如果我更改此设置

            panel.Controls.Add(
                new Label()
                {
                    Text = "state",
                    Dock = DockStyle.Fill
                },
                /*column*/ 0, /*row*/ 0);

至此

var label1 = new Label()
            {
                Text = "state",
                Dock = DockStyle.Fill
            };

            panel.SetRow(label1, 0);
            panel.SetColumn(label1, 0);

这不起作用...我在做什么错?

这里是我的代码

public partial class TestFormDeleteIt : Form
    {
        public TestFormDeleteIt()
        {
            InitializeComponent();

            AutoSize = true;
            AutoSizeMode = AutoSizeMode.GrowAndShrink;
            MinimumSize = new System.Drawing.Size(200, 0);

            var flp = CreateTableLayoutPanel();
            Controls.Add(flp);
        }

        private TableLayoutPanel CreateTableLayoutPanel()
        {
            // TableLayoutPanel Initialization
            var panel = new TableLayoutPanel
            {
                ColumnCount = 2,
                RowCount = 2,
                Dock = DockStyle.Fill
            };

            //Adjust column size in percentage
            panel.ColumnStyles.Clear();
            panel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 90F));
            panel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 10F));

            //Adjust row size in percentage
            panel.RowStyles.Clear();
            panel.RowStyles.Add(new RowStyle(SizeType.Percent, 50F));
            panel.RowStyles.Add(new RowStyle(SizeType.Percent, 50F));

            //Fill content
            panel.Controls.Add(
                new Label()
                {
                    Text = "state",
                    Dock = DockStyle.Fill
                },
                /*column*/ 0, /*row*/ 0);

            panel.Controls.Add(
                CreateProgressBar(),
                /*column*/ 0, /*row*/ 1);

            panel.Controls.Add(
                new Label()
                {
                    Text = "100%",
                    Dock = DockStyle.Fill
                }, 
                /*column*/ 1, /*row*/ 1);

            panel.AutoSizeMode = AutoSizeMode.GrowAndShrink;
            panel.AutoSize = true;

            return panel;
        }

        private Control CreateProgressBar() => new ProgressBar()
        {
            Visible = true,
            Dock = DockStyle.Top
        };
    }

问题是-即使在我的表单中将静态宽度设置为200-> MinimumSize = new System.Drawing.Size(200, 0),当我打开它时,我看到它的花费也像1000 ...

enter image description here

为什么会发生?

c# winforms
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.