0

我有一个面板和 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 和 3 略大。就我的目的而言,这种效果对我的目的来说有点好,但在较低的分辨率上,例如 1024*768 左右,标签 2 完全消失或变得太小,所以会发生相反的情况. 我不明白为什么会发生这种情况,也不明白如何使用标准面板均匀分布它们。我正在使用数千个,并且我已经在 TableLayoutPanel 中拥有了这些,所以我认为在 TableLayoutPanels 中制作一堆 TableLayoutPanel 并不是一个好主意,因为我认为这将是矫枉过正。在常规面板中平均分配 3 个标签的简单方法是什么?毕竟我有 TextAlign 中间底部顶部,为什么我不能用它们来完成我正在做的事情,因为它只有 3 个标签?

4

2 回答 2

0

将 label1 停靠在顶部,将 label3 停靠在底部。然后将 label2 dock 设置为将 autosize 填充为 false 并将 textalign 设置为 MiddleLeft

编辑:

将 label.Tag 设置为“makemecentered”并将其添加到面板的 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%,所以将标签的自动大小设置为 false 设置所需的 textaligns

添加面板 SizeChanged 事件

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

并在表单创建时提出

这是我最后一次编辑,保证!

于 2013-06-09T22:14:08.803 回答
0

您好 CodeCamper,您可以将面板的锚点设置为全部,并将标签设置为左右,然后您可以尝试一下。

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;
        }

并将所有标签 AutoSize 属性设置为 false。

于 2013-06-09T23:51:22.567 回答