缩放窗口窗体窗口
本文关键字:窗口 窗体 缩放 | 更新日期: 2023-09-27 17:56:06
可以
准备窗口窗体窗口以根据窗口大小调整/重新定位所有元素,但我正在尝试做一些不同的事情。
是否有可能以某种方式实际缩放窗口以及其中的所有元素,而不管它们的位置、属性等如何?
基本上,您可以在某些图形编辑器中缩放图片的方式 - 您可以拉伸或缩小它,但图片上的内容并不重要。
那么,是否可以对表单执行类似操作?无论表单内部的内容如何,都能够缩放其大小。
Windows表单不提供任何功能来执行此操作。但是,您可以编写自己的代码并使表单解析独立。
这不是使窗口窗体分辨率独立的完整示例,但是,您可以从此处获取逻辑。以下代码在快速调整窗口大小时会产生问题。
法典:
private Size oldSize;
private void Form1_Load(object sender, EventArgs e) => oldSize = base.Size;
protected override void OnResize(System.EventArgs e)
{
base.OnResize(e);
foreach (Control cnt in this.Controls)
ResizeAll(cnt, base.Size);
oldSize = base.Size;
}
private void ResizeAll(Control control, Size newSize)
{
int width = newSize.Width - oldSize.Width;
control.Left += (control.Left * width) / oldSize.Width;
control.Width += (control.Width * width) / oldSize.Width;
int height = newSize.Height - oldSize.Height;
control.Top += (control.Top * height) / oldSize.Height;
control.Height += (control.Height * height) / oldSize.Height;
}
否则,您可以使用任何第三方控件,如 DevExpress Tool。有布局控制提供相同的功能。可以在运行时显示和隐藏任何控件,而无需留空格。
窗体具有 Scale 属性。 您可以直接设置此属性,它将同时影响窗体上的每个控件。
float scaleX = ((float)formNewWidth / formBaseWidth);
float scaleY = ((float)formNewHeight / formBaseHeight);
this.Scale(new SizeF(scaleX, scaleY));
将其放在调整大小事件中。
查看自 .NET 2.0 以来可用的 Control.Scale 方法。