Winform Panel按钮位置
Winform 位置 按钮 panel
2023-09-14 09:03:15 时间
1、Panel上设置某个按钮居中
this.btnExit.Location = new System.Drawing.Point(pnlButton.Width / 2, pnlButton.Height / 2);
2、Panel上多个按钮自动排序
原始状态:
调整顺序的代码:
/// summary
/// 设置按钮显示位置
WPF中Popup等弹窗的位置不对(偏左或者偏右) 原文:WPF中Popup等弹窗的位置不对(偏左或者偏右) 1.情况如图: 正常情况: 部分特殊情况: 在一般的电脑都能正确显示,就是第一种情况,同样的代码为什么在不同的电脑就会显示不同的位置呢,原来Windows为了满足 不同需求的用户,左撇子和右撇子,就...
WinForm点击按钮在对应的panel里画图 panel在form1里,button在form1上方,panel在下面。 主要是在button1的click时间获取panel的画笔。 下面的不行,在panel里获取画笔,然后传到button1,根本不行,因为程序的逻辑是,先点击button1加载数据,关键是怎么调用panel1_Paint方法,不知道如何调用,那就没办法同时获取panel的画笔,同理,因为此时在panel1化数据的话还没有点击button1加载数据,所以dataProject是null,而且图形根本出不来,加一个判断就ok了。
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 }此时的效果如下图:
拓展:点击打开链接
WPF中Popup等弹窗的位置不对(偏左或者偏右) 原文:WPF中Popup等弹窗的位置不对(偏左或者偏右) 1.情况如图: 正常情况: 部分特殊情况: 在一般的电脑都能正确显示,就是第一种情况,同样的代码为什么在不同的电脑就会显示不同的位置呢,原来Windows为了满足 不同需求的用户,左撇子和右撇子,就...
WinForm点击按钮在对应的panel里画图 panel在form1里,button在form1上方,panel在下面。 主要是在button1的click时间获取panel的画笔。 下面的不行,在panel里获取画笔,然后传到button1,根本不行,因为程序的逻辑是,先点击button1加载数据,关键是怎么调用panel1_Paint方法,不知道如何调用,那就没办法同时获取panel的画笔,同理,因为此时在panel1化数据的话还没有点击button1加载数据,所以dataProject是null,而且图形根本出不来,加一个判断就ok了。