C# using dockstyle and set margin
Asked Answered
L

2

6

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

Lemmie answered 22/7, 2014 at 9:47 Comment(2)
You're doing this without the designer? If yes, consider using SuspendLayout and ResumeLayout afterwards.Inexactitude
This is WinForms? It would be helpful if you specified that by using the WinForms tag on your question.Zipper
M
9

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);
Matthus answered 22/7, 2014 at 10:15 Comment(0)
M
3

First undock the RTB. Then set the positions of RTB and button as you want(By specifying bounds programmatically).

Then set the anchor property of RTB to all side. i.e. Top Left Bottom Right

And then set button anchor to Left Right Bottom.

Also, if you want more control of layout, you can use flow layout panel or table layout panel control.

Montez answered 22/7, 2014 at 10:7 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.