需要在面板中均匀分布3个标签,但在分辨率变化时发生奇怪的变化

本文关键字:变化 分辨率 标签 3个 分布 | 更新日期: 2023-09-27 18:17:31

我有一个面板和3个标签,像这样

----------
| Label1 |
| Label2 |
| Label3 |
----------

我希望33%的面板是标签1、2和3,以便它们均匀分布。如果我只是使用一个TableLayoutPanel来完成这一点,我使用Panel的原因是因为我需要每组3个标签逻辑块,我将有数千个。

到目前为止,我用来完成这个任务的代码如下
panel[0] = new Panel { 
               BackColor = Color.White, 
               Dock = DockStyle.Fill 
           };
label2[0] = new Label { 
                Text = "[label2]",  
                Dock = DockStyle.Fill, 
                AutoSize = false,
                TextAlign = ContentAlignment.MiddleCenter 
            };
panel[0].Controls.Add(label2[0]);
label3[0] = new Label { 
                Text = "[label3]",  
                Dock = DockStyle.Bottom, 
                AutoSize = false,     
                TextAlign = ContentAlignment.BottomCenter 
            };
panel[0].Controls.Add(label3[0]);
label1[0] = new Label { 
                Text = "[label1]",  
                Dock = DockStyle.Top, 
                AutoSize = false,     
                TextAlign = ContentAlignment.TopCenter 
            };
panel[0].Controls.Add(label1[0]);

现在我的当前效果是Label2略大于label1和label3。对于我的目的,这种效果对我的目的来说是很好的,但在较低的分辨率下,比如1024*768左右,Label 2完全消失或变得太小,所以相反的情况发生了。我不明白为什么会发生这种情况,也不明白如何使用标准面板均匀地分配它们。我正在使用成千上万的这些,我已经有这些在一个TableLayoutPanel,所以我不认为这将是一个好主意,使一堆的TableLayoutPanel在TableLayoutPanel,因为我认为这将是过度杀伤。在常规面板中平均分配3个标签的简单方法是什么?毕竟我有TextAlign中间,底部,顶部,为什么我不能使用他们来完成我正在做的事情,因为它只有3个标签?

需要在面板中均匀分布3个标签,但在分辨率变化时发生奇怪的变化

你好,CodeCamper你可以设置面板的锚点为all,标签为左右,然后你可以试试这个

private void Form1_Load(object sender, EventArgs e)
        {
            if (panel1.Height % 3 == 0)
            {
                SetLabels();
            }
            else
            {
                while (panel1.Height % 3 != 0)
                {
                    panel1.Height++;
                }
                SetLabels();
            }
        }
        private void SetLabels()
        {
            panel1.Controls["label1"].Location = new Point(1, 1);
            panel1.Controls["label1"].Height = (panel1.Height / 3);
            panel1.Controls["label1"].Width = panel1.Width;
            label1.BackColor = Color.Red;
            panel1.Controls["label2"].Location = new Point(1, label1.Height);
            panel1.Controls["label2"].Height = label1.Height;
            panel1.Controls["label2"].Width = panel1.Width;
            label2.BackColor = Color.Purple;
            panel1.Controls["label3"].Location = new Point(1, label2.Height + label1.Height);
            panel1.Controls["label3"].Height = label1.Height;
            panel1.Controls["label3"].Width = panel1.Width;
            label3.BackColor = Color.Beige;
        }

设置label1为顶部,label3为底部。然后将label2 dock填充自动大小设置为false并将textalign设置为MiddleLeft

编辑:

设置标签。标签为"makemecenter "并将其添加到Panel的SizeChangedEvent:

foreach (Label lab in (sender as Panel).Controls)            
    if (lab.Tag != null && lab.Tag.ToString() == "makemecentered")                
        lab.Top = (int)(sender as Panel).Height / 2 - lab.Height / 2;                       

编辑2:我真的不知道我的阅读能力是否已经消失了……你想把每个标签设为33% so将标签的自动大小设置为false设置所需的文本符号

add panel sizechange event

    private void panel1_SizeChanged(object sender, EventArgs e)
    {
        foreach (Label lab in (sender as Panel).Controls)
            lab.Height = (int) (sender as Panel).Height/3;
    }

并在form create

上抬高它这是我最后一次编辑,我保证!