C# using dockstyle and set margin

Naigel picture Naigel · Jul 22, 2014 · Viewed 13.7k times · Source

I'm trying to insert a couple of objects in a new form that I programmatically create; basically I want a Button on the bottom and a RichTextBox filling all the remaining space. I set the first as Dock = DockStyle.Bottom and the latter as Dock = DockStyle.Fill and it works.

Now I'm trying to insert a spacing between elements, so I added a padding in the form and a margin in the button. The first works correctly, but margin doesn't, so no space between RichTextBox and Button.

Here is the code and the output. Am I missing something?

// 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

Answer

Sathish picture Sathish · Jul 22, 2014

Setting the Margin property on a docked control has no effect on the distance of the control from the the edges of its container.

Read MSDN. Use Table layout panel

Like this

           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);