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