Winforms,在使用Dock属性时创建填充
使用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时它会忽略size命令?
使用DockStype.Top,您无法更改TextBox的宽度,因为它们已停靠。 你只能改变高度。 但要更改TextBox的高度,您必须事先设置Multiline = true
。
要获得不同框之间的空间,您必须将每个TextBox放在面板中,设置TextBox.Dock = Fill
, Panel.Padding = 10
Panel.Dock = Top
和Panel.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。 也许这也可以帮助您解决问题。
适合较小布局的另一种解决方法是只添加一个Label
控件,然后停靠在Top
,这不是AutoSized, Text=" "
, Height=your padding
。 这对于使用设计器时的奇数填充非常有用。
我知道你来自哪里,从WPF返回WinForms后,这尤其令人沮丧。
我建议使用TableLayoutPanel ,其中每个TextBox都会获得自己的单元格,并调整单元格的属性。 这应解决您的填充和大小问题。
另一种选择是使用一些更复杂的布局控件,例如DevExpress布局控件(不是免费的)。