需要在面板中均匀分布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个标签?
你好,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
上抬高它这是我最后一次编辑,我保证!