Winforms,在使用Dock属性时创建填充

时间:2010-04-29 13:15:09

标签: c# winforms padding

使用dockstyle.top属性时,如何在文本框之间添加填充或空格?

for(int i =0; i< 10; i++) {
    textboxes[i] = new TextBox();
    textboxes[i].Dock = DockStyle.Top;
    mypanel.Controls.Add(textboxes[i]); 
}

上面的代码将文本框放在彼此的正下方。如果不使用质量面板或固定定位,无法解决这个问题。如何做到以下几点?

1)我想在盒子之间添加大约10-20像素。

2)如何更改文本框的大小(高度,宽度),因为在使用dockstyle.top时它会忽略大小命令?

3 个答案:

答案 0 :(得分:19)

使用DockStype.Top,您无法更改TextBox的宽度,因为它们已停靠。你只能改变高度。但要更改TextBox的高度,您必须事先设置Multiline = true

要获取不同框之间的空间,您必须将每个TextBox放在面板中,设置TextBox.Dock = FillPanel.Dock = TopPanel.Padding = 10。现在每个TextBox之间都有一些空格。

示例代码

for (int i = 0; i < 10; i++)
{
    var panelTextBox = CreateBorderedTextBox();

    this.Controls.Add(panelTextBox);
}

private Panel CreateBorderedTextBox()
{
    var panel = CreatePanel();
    var textBox = CreateTextBox();

    panel.Controls.Add(textBox);
    return panel;
}

private Panel CreatePanel()
{
    var panel = new Panel();
    panel.Dock = DockStyle.Top;
    panel.Padding = new Padding(5);

    return panel;
}

private TextBox CreateTextBox()
{
    var textBox = new TextBox();
    textBox.Multiline = true;
    textBox.Dock = DockStyle.Fill;

    return textBox;
}

我忘记了,你也可以试试FlowLayoutPanel。只需从面板中删除DockStyle.Top并将它们放入FlowLayoutPanel即可。您还应将FlowDirection设置为TopDown。也许这也可以帮助您解决问题。

答案 1 :(得分:3)

另一种适合较小布局的解决方法是,只需添加一个Label控件,然后停靠Top,这不是自动调整大小,Text=" "Height=your padding。这对于使用设计器时的奇数填充非常有用。

答案 2 :(得分:2)

我知道你来自哪里,从WPF返回WinForms后,这尤其令人沮丧。

我建议使用TableLayoutPanel,其中每个TextBox都会获得自己的单元格,并调整单元格的属性。这应解决您的填充和大小问题。

另一种选择是使用一些更复杂的布局控件,例如DevExpress布局控件(不是免费的)。