缩放窗口窗体窗口

本文关键字:窗口 窗体 缩放 | 更新日期: 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 方法。