閱讀957 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Winform Panel按鈕位置

1、Panel上設置某個按鈕居中

 this.btnExit.Location = new System.Drawing.Point(pnlButton.Width / 2, pnlButton.Height / 2);

2、Panel上多個按鈕自動排序

原始狀態:


調整順序的代碼:

        /// <summary>
        /// 設置按鈕顯示位置
       /// </summary>
       /// <param name="targetPanel">要設置按鈕的Panel</param>
       /// <param name="buttonSpace">按鈕之間的間隔</param>
        public void SetButtonCenter(Panel targetPanel, int buttonSpace)
        {
            int length = 0;
            List<Button> listBtn = new List<Button>();
            System.Windows.Forms.Control.ControlCollection c = targetPanel.Controls;
            foreach (Button btn in c)
            {
                listBtn.Add(btn);
                length += btn.Width + buttonSpace;
            }
            int pnlLength = targetPanel.Width;
            if (length > pnlLength) //本身按鈕的長度總和大於了panel的長度,不調整
                return;
            int startPos = (pnlLength - length) / 2 - 10; //左縮進10個點位
            int yPos = targetPanel.Height / 2;
            int xPos = startPos;
            foreach (Button btn in listBtn)
            {
                btn.Location = new System.Drawing.Point(xPos, yPos);
                xPos += btn.Width + buttonSpace;
            }
        }

初步調整後的樣子:

注意奧親,按鈕順序是反向的!

那麼怎麼讓按鈕順序正確呢?

代碼如下:

private void Form1_Load(object sender, EventArgs e)
        {
            SetButtonCenter(panelTest, 2);
        }
        /// <summary>
        /// 設置按鈕顯示位置
        /// </summary>
        /// <param name="pnlButton">需要調整按鈕順序的Panel</param>
        /// <param name="buttonSpace">按鈕間隔</param>
        public void SetButtonCenter(Panel targetPanel,int buttonSpace)
        {
            int length = 0;
            List<Button> listBtn = new List<Button>();
            System.Windows.Forms.Control.ControlCollection c = targetPanel.Controls;
            foreach (Button btn in c)
            {
                listBtn.Add(btn);
                length += btn.Width + buttonSpace;
            }
            int pnlLength = targetPanel.Width;
            if (length > pnlLength) //本身按鈕的長度總和大於了panel的長度,不調整
                return;
            int startPos = (pnlLength - length) / 2 - 10; //左縮進10個點位
            int yPos = targetPanel.Height / 2;
            int xPos = startPos;
            listBtn.Sort(new ButtonSort());
            foreach (Button btn in listBtn)
            {
                btn.Location = new System.Drawing.Point(xPos, yPos);
                xPos += btn.Width + buttonSpace;
            }
        }
        public class ButtonSort : IComparer<Button>
        {
            #region IComparer<Button> Members
            //IComparer<T> 接口:定義類型為比較兩個對象而實現的方法。
            public int Compare(Button x, Button y)
            {
                if (x.TabIndex >= y.TabIndex)
                    return 1;
                else
                    return -1;
            }
            #endregion
        }
此時的效果如下圖:



 拓展:點擊打開鏈接

最後更新:2017-04-03 12:55:33

  上一篇:go 怎麼讓有些QQ好友的動態不在自己空間裏顯示
  下一篇:go Android使用 startActivityForResult 、 onActivityResult 時的注意事項