自动定位控件(不含TableLayoutPanel)

时间:2017-06-26 16:05:01

标签: c# winforms layout

我的问题出在图片中:

position

如何在没有TableLayoutPanel的情况下自动定位下一个控件(此示例中的文本框)?

2 个答案:

答案 0 :(得分:0)

以下是使用计数器跟踪创建的控件数量并计算正确Y位置的简单示例:

private int counter = 0;

private void button1_Click(object sender, EventArgs e)
{
    counter++;
    int y = counter * 25;

    Label lbl = new Label();
    lbl.Text = "Label " + counter.ToString();
    lbl.Location = new Point(5, y);

    TextBox tb = new TextBox();
    tb.Location = new Point(lbl.Bounds.Right + 5, y);
    this.Controls.Add(lbl);
    this.Controls.Add(tb);
}

答案 1 :(得分:0)

您的意思是希望TextBox根据Label的宽度向左/向右移动吗?

private void button2_Click(object sender, EventArgs e) {
    int gap1 = textBox1.Left - label1.Right;
    label1.AutoSize = true;
    label1.Text = "long long long long long long long long";
    textBox1.Left = label1.Right + gap1;

    int gap2 = textBox1.Left - label1.Right;
    label2.AutoSize = true;
    label2.Text = "s";
    textBox2.Left = label2.Right + gap2;
}

首先记录TextBoxLabel之间的差距,然后将AutoSize设置为true,然后设置Label的新内容,最后你可以相应地移动TextBox

在:

before

后:

after

如果您需要对齐多个TextBoxTextBox的宽度,那么它会更复杂,但您可以遵循类似的逻辑。

但是,您必须编写自己的代码,但在Design视图中不可行,因为控件的Anchor是父容器而不是兄弟控件。好吧,在Mac上的Xcode你可以这样做,但AFAIK Visual Studio没有开箱即用的功能。