如何降低控制力

时间:2015-01-20 21:47:57

标签: c# winforms label vertical-alignment

我有一个带有可变长度文本的标签,下面是一个progressBar。我想在该标签和progressBar之间保留一个空格,因此根据标签的文本(包装),应该按下progressBar,始终保持它们之间的空间。我该怎么办?我尝试了AutoSize = trueAutoSizeMode = GrowAndShrink,但它没有改变任何东西。例如:

 ---------------------------
|  for example the label's  |
|  text might be something  |
|  like this, with a lot of |
|  of text but the progress |
|  bar should be here       |
|                           |
| progressBar here          |
 ---------------------------

示例2:

 ---------------------------
|  small text               |
|                           |
| progressBar here          |
 ---------------------------

3 个答案:

答案 0 :(得分:5)

将Label和ProgressBar放入FlowDirection属性设置为TopDown的{​​{3}}。现在,当Label垂直增长时,ProgressBar将自动下推。要控制Label和ProgressBar之间的距离,请更改Label的Bottom属性中的Padding值。

在表单和FlowLayoutPanel上设置为AutoSize并使用true GrowOnly几次按下按钮后,我的表单会是什么样子}}):

enter image description here

AutoSizeMode

答案 1 :(得分:2)

如果您保存进度条的初始Y位置,则可以根据标签的高度动态设置位置。它将保留您最初设置的填充。

因此,如果我有以下表格,按下按钮时标签会自动更新,我可以在按钮点击事件中更新进度条位置。

enter image description here

public partial class Form1 : Form
{
    private readonly int initialProgressbarLocationY;

    public Form1()
    {
        InitializeComponent();

        label1.MaximumSize = new Size(80, 1000); //Wrapping label
        label1.AutoSize = true;

        initialProgressbarLocationY = progressBar1.Location.Y; //Save the original position
    }

    private void button1_Click(object sender, EventArgs e)
    {
        label1.Text += "bla blablablabla bla";
        MoveProgressbar();
    }

    private void MoveProgressbar()
    {
        // Set the progressbar at the same X, but update the Y according to the label's height
        progressBar1.Location = new Point(progressBar1.Location.X,
            initialProgressbarLocationY + label1.Height);
    }
}

点击几下按钮后会得到以下结果:

enter image description here

如果您的标签以某些文字开头,您可能需要从新Y中减去原始标签高度,否则第一次填充会稍微增加。

答案 2 :(得分:1)

设置label.text。那么

progessBar.Top = label.Bottom + WhateverSpaceYouWant