C# using dockstyle and set margin

14,919

Solution 1

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

Solution 2

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.

Share:
14,919
Naigel
Author by

Naigel

I've always had a passion for IT related stuffs. Suddenly I found myself as a computer engineering student, then I accidentally started my career as system engineer, then evolved into a data analyst and finally reached the status of computer scientist. What does this exactly mean? Well... not sure yet, I guess it's like being a software engineer who understand some theoretical computer science.

Updated on June 04, 2022

Comments

  • Naigel
    Naigel about 2 years

    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