C#使用dockstyle并设置边距

时间:2014-07-22 09:47:35

标签: c# winforms margin padding spacing

我正在尝试以编程方式创建的新表单中插入几个对象;基本上我希望底部有ButtonRichTextBox填充所有剩余空间。我将第一个设置为Dock = DockStyle.Bottom,将后者设置为Dock = DockStyle.Fill,它可以正常工作。

现在我正在尝试在元素之间插入一个间距,所以我在表单中添加了一个填充,并在按钮中添加了一个边距。第一个工作正常,但边距不正确,因此RichTextBoxButton之间没有空格。

这是代码和输出。我错过了什么吗?

// Parent Form
SMSForm.Padding = new Padding(5);

// TextBox
RichTextBox SMStext = new RichTextBox();
SMSForm.Controls.Add(SMStext);
SMStext.Dock = DockStyle.Fill;

// Button
Button SMSsend = new Button();
SMSsend.Text = "Send SMS to ";
SMSForm.Controls.Add(SMSsend);
SMSsend.Margin = new Padding(10);
SMSsend.Dock = DockStyle.Bottom;

enter image description here

2 个答案:

答案 0 :(得分:4)

在停靠控件上设置Margin属性不会影响控件与容器边缘的距离。

Read MSDN。使用Table layout panel

喜欢这个

           RichTextBox SMStext = new RichTextBox();

            TableLayoutPanel pnl1 = new TableLayoutPanel();
            pnl1.RowStyles.Clear();
            pnl1.ColumnStyles.Clear();
            pnl1.RowCount += 2;
            pnl1.ColumnCount += 1;
            pnl1.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100.0F));
            pnl1.RowStyles.Add(new RowStyle(SizeType.Percent,80.0F));
            pnl1.RowStyles.Add(new RowStyle(SizeType.Percent,20.0F));
            pnl1.Controls.Add(SMStext,0,0);
            SMStext.Dock = DockStyle.Fill;
            Button SMSsend = new Button();
            SMSsend.Text = "Send SMS to ";
            this.Controls.Add(pnl1);
            pnl1.Dock = DockStyle.Fill;
            pnl1.Controls.Add(SMSsend,0,1);
            SMSsend.Dock = DockStyle.Fill;
           SMSsend.Margin = new Padding(10);

答案 1 :(得分:2)

首先解开RTB。然后根据需要设置RTB和按钮的位置(通过编程方式指定边界)。

然后将RTB的锚属性设置为所有方。即左上方右下方

然后将按钮锚点设置为左下角。

此外,如果您想要更多地控制布局,可以使用流布局面板或表布局面板控件。