Winform動態設置TableLayoutPanel等寬高

        最近有個項目要修改,看完後果斷決定重構,裏面很多不規範的地方,佈局大部分都是計算出來的,但是基本沒有采用佈局控件,不能自適應,其中有類似九宮格的佈局方式,放在WPF,那真是一個控件秒秒鐘能搞定的事情,好多年沒做winform了,拿回來還是很容易上手。在winform裏,最適合就是TableLayoutPanel了,本來簡單的內容想不寫,不過可能有人需要用到就放上來。

        廢話說那麼多了,進入正題,其實動態佈局很簡單,就是SizeType.Percent,大小100F就好了,代碼如下。

private void InitLayoutDemo()
        {
            TableLayoutPanel demoLayoutPanel = new TableLayoutPanel();
            demoLayoutPanel.Dock = DockStyle.Fill;
            this.Controls.Add(demoLayoutPanel);
            int row = 3, col = 3;
            DynamicLayout(demoLayoutPanel, row, col);
            for (int i = 0; i < row; i++)
            {
                for (int j = 0; j < col; j++)
                {
                    Button btn = new Button();
                    btn.Text = string.Format("({0},{1})", i, j);
                    btn.Dock = DockStyle.Fill;
                    demoLayoutPanel.Controls.Add(btn);
                    demoLayoutPanel.SetRow(btn, i);
                    demoLayoutPanel.SetColumn(btn, j);
                }
            }
        }

        /// <summary>
        /// 動態佈局
        /// </summary>
        /// <param name="layoutPanel">佈局面板</param>
        /// <param name="row">行</param>
        /// <param name="col">列</param>
        private void DynamicLayout(TableLayoutPanel layoutPanel, int row, int col)
        {
            layoutPanel.RowCount = row;    //設置分成幾行
            for (int i = 0; i < row; i++)
            {
                layoutPanel.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
            }
            layoutPanel.ColumnCount = col;    //設置分成幾列
            for (int i = 0; i < col; i++)
            {
                layoutPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F));
            }
        }

注意,我這裏TableLayoutPanel也是動態添加的,如果TableLayoutPanel是已經拖放到Form裏面的,把原來的行列刪剩一行一列,且保證都是百分比100%。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章