Winforms,使用 Dock 属性创建填充

18

当我使用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个回答

22

如果使用DockStyle.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。也许这也可以帮助你解决问题。


我曾担心我会被迫这样做。谢谢。 - Milan
FlowLayoutPanel非常棒。我想要两个标签并排放置,它们从左到右增长,通过将控件推到前面来保持对齐,并且使用FLP做得很好。 - Jack

5

适用于较小的布局的另一种解决方法是在之后添加一个Label控件,也对齐到Top,它不是自动调整大小,Text=" "Height=您的填充值。这对于在设计师中使用时需要的间距非常有用。


2
我知道你的想法,从WPF返回WinForms后这尤其令人沮丧。
我建议使用TableLayoutPanel,其中每个文本框都会得到自己的单元格,并调整单元格的属性。这应该可以解决你的填充和大小问题。
另一个选择是使用一些更复杂的布局控件,例如DevExpress(非免费)。

将来会尝试使用TableLayoutPanel。感谢这个提示。 - Milan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接