C# 缩放窗口窗体窗口

C# 缩放窗口窗体窗口,c#,winforms,resize,scaling,C#,Winforms,Resize,Scaling,根据窗口大小,可以准备windows窗体窗口来调整/重新定位所有元素的大小,但我正在尝试做一些不同的事情 是否可以以某种方式实际缩放窗口以及内部的所有元素,而不考虑其位置、属性等 基本上就像你在一些图形编辑器中缩放图片一样——你可以拉伸或收缩它,但这与图片上的内容无关 那么,是否可以对表单执行类似的操作?无论表单中有什么内容,都可以缩放其大小。Windows表单不提供任何功能。但是,您可以编写自己的代码并使表单解析独立 这不是一个使windows窗体解析独立的完整示例,但是,您可以从这里获得逻辑

根据窗口大小,可以准备windows窗体窗口来调整/重新定位所有元素的大小,但我正在尝试做一些不同的事情

是否可以以某种方式实际缩放窗口以及内部的所有元素,而不考虑其位置、属性等

基本上就像你在一些图形编辑器中缩放图片一样——你可以拉伸或收缩它,但这与图片上的内容无关


那么,是否可以对表单执行类似的操作?无论表单中有什么内容,都可以缩放其大小。

Windows表单不提供任何功能。但是,您可以编写自己的代码并使表单解析独立

这不是一个使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;
}

否则,您可以使用任何第三方控件(如工具)。有一家公司提供相同的设施。您可以在运行时显示和隐藏任何控件,而无需留下空白。

请检查自.NET 2.0以来可用的方法。

您的窗体具有缩放属性。您可以直接设置此属性,它将同时影响窗体上的每个控件

float scaleX = ((float)formNewWidth / formBaseWidth);
float scaleY = ((float)formNewHeight / formBaseHeight);
this.Scale(new SizeF(scaleX, scaleY));

将其放入调整大小事件中。

你指的是独立于分辨率的表单吗?@Nimesh如果我理解正确-那么是的,或多或少。只需更改表单的字体属性。哦。我从来没想过。嗯,其实很容易实现。非常感谢。这在我的WinForm窗口上非常有效。感谢您的简单修复!这是一个简单的解决办法。但我有一个问题,一些控件在向后拉伸时无法恢复到以前的大小。