Align controls to center in a FlowLayout

后端 未结 7 816
一向
一向 2020-12-30 01:47

I have a flowlayout as follows:

\"enter

I need to center all the controls on t

7条回答
  •  囚心锁ツ
    2020-12-30 02:31

    You can do it two ways but with some limitation of each one.

    1. Using Anchor property
    2. Using the layout control with help of Docking and Anchor properties.

    Method 1: Anchor Property

    Controls are anchored by default to the top left of the form which means when the form size will be changed, their distance from the top left side of the form will remain constant. If you change the control anchor to bottom left, then the control will keep the same distance from the bottom and left sides of the form when the form if resized.

    Turning off the anchor in a direction will keep the control centred in that direction when resizing.

    Example :

    public TestForm12()
    {
       InitializeComponent();
    
       Button btn = new Button();
       btn.Width = this.Width - 10;
       btn.Height = 20;
       btn.Left = (this.ClientSize.Width - btn.Width) / 2;
       btn.Top = (this.ClientSize.Height - btn.Height) / 2;
       btn.Text = "click me";
       this.Controls.Add(btn);
       btn.Anchor = AnchorStyles.None;               
    
    }
    

    2. Using the layout control

    1. Add TableLayout Control, Set it’s Dock property to Fill.
    2. Add 1 Row with Size Type style Percent 100%
    3. Add 3 Columns Column1(Size Type – Percent(100%)), Column2(Size Type – Absolute(200px)), Column3(Size Type – Percent(100%)).
    4. Now Add Panel Control to Column2 and Set it’s Dock property to Fill
    5. Add Buttons to this control and set their Size as you want and Set Their Anchor Property to AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top

    Example - Designer.cs code snippet of the form.

    private void InitializeComponent()
     {
         this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
         this.panel1 = new System.Windows.Forms.Panel();
         this.button1 = new System.Windows.Forms.Button();
         this.button2 = new System.Windows.Forms.Button();
         this.tableLayoutPanel1.SuspendLayout();
         this.panel1.SuspendLayout();
         this.SuspendLayout();
         // 
         // tableLayoutPanel1
         // 
         this.tableLayoutPanel1.ColumnCount = 3;
         this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
         this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 200F));
         this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
          this.tableLayoutPanel1.Controls.Add(this.panel1, 1, 0);
          this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
          this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);
          this.tableLayoutPanel1.Name = "tableLayoutPanel1";
          this.tableLayoutPanel1.RowCount = 1;
          this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
          this.tableLayoutPanel1.Size = new System.Drawing.Size(284, 262);
          this.tableLayoutPanel1.TabIndex = 0;
          // 
          // panel1
          // 
          this.panel1.Controls.Add(this.button2);
          this.panel1.Controls.Add(this.button1);
          this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
          this.panel1.Location = new System.Drawing.Point(45, 3);
          this.panel1.Name = "panel1";
          this.panel1.Size = new System.Drawing.Size(194, 256);
          this.panel1.TabIndex = 0;
          // 
          // button1
          // 
          this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
        | System.Windows.Forms.AnchorStyles.Right)));
        this.button1.Location = new System.Drawing.Point(3, 9);
        this.button1.Name = "button1";
        this.button1.Size = new System.Drawing.Size(188, 23);
        this.button1.TabIndex = 0;
        this.button1.Text = "button1";
        this.button1.UseVisualStyleBackColor = true;
        // 
        // button2
        // 
        this.button2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
        | System.Windows.Forms.AnchorStyles.Right)));
        this.button2.Location = new System.Drawing.Point(3, 38);
        this.button2.Name = "button2";
        this.button2.Size = new System.Drawing.Size(188, 23);
        this.button2.TabIndex = 0;
        this.button2.Text = "button1";
        this.button2.UseVisualStyleBackColor = true;
        // 
        // TestForm11
        // 
        this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
        this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
        this.ClientSize = new System.Drawing.Size(284, 262);
        this.Controls.Add(this.tableLayoutPanel1);
        this.Name = "TestForm11";
        this.Text = "TestForm11";
        this.tableLayoutPanel1.ResumeLayout(false);
        this.panel1.ResumeLayout(false);
        this.ResumeLayout(false);
    
    }
    
     #endregion
    
    private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
    private System.Windows.Forms.Panel panel1;
    private System.Windows.Forms.Button button2;
    private System.Windows.Forms.Button button1;
    

    Hope this help..

提交回复
热议问题