在更改边框样式时,强制窗体的内部保持在同一位置
本文关键字:内部 位置 窗体 边框 样式 | 更新日期: 2023-09-27 18:21:05
我有一个winform,它一开始有一个相当大的边框。窗体上有一个按钮,按下它时,会将窗体更改为border-style none。
问题是,然后表单的内部稍微向上和向左移动。我想确保,无论使用什么边界,表单的"内部"部分都将始终保持在同一位置(注意:但我仍然希望表单在选择了可移动边界时可以四处移动)
谢谢。
无边界表单向上移动并稍微向左移动,因为这是表单当前所在的位置,您需要计算边界。为了实现您所处的结果,您需要重新分配位置属性,并为此需要考虑客户端大小和整个大小(带边框),我认为代码很简单,我相信它将不言自明:
private void button1_Click(object sender, EventArgs e)
{
var X = (this.Size.Width - this.ClientRectangle.Width) / 2;
var Y = (this.Size.Height - this.ClientRectangle.Height) - X;
Point p = new Point(Location.X + X, Location.Y + Y);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.Location = p;
}
另一个选项是在包含带边框面板的父级上设置填充。例如
public class Form10 : Form {
Button btn = new Button { Text = "Button", Location = new Point(100, 100) };
Panel border = new Panel { Dock = DockStyle.Fill, BorderStyle = BorderStyle.Fixed3D };
public Form10() {
Controls.Add(border);
border.Controls.Add(btn);
btn.Click += delegate {
if (border.BorderStyle == BorderStyle.Fixed3D) {
border.BorderStyle = BorderStyle.None;
border.Parent.Padding = new Padding(2);
}
else {
border.BorderStyle = BorderStyle.Fixed3D;
border.Parent.Padding = new Padding(0);
}
};
}
}