缩放窗体窗口

问题描述 投票:3回答:2

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

是否有可能以某种方式实际缩放窗口以及内部的所有元素,而不管它们的位置,属性等?

基本上你在一些图形编辑器中缩放图片的方式 - 你可以拉伸或缩小它,但是那张图片上的内容并不重要。

那么,是否有可能与表格做类似的事情?无论表格内部是什么,都可以扩展其大小。

c# winforms resize scaling
2个回答
6
投票

Windows窗体不提供任何功能来执行此操作。但是,您可以编写自己的代码并使表单分辨率独立。

这不是一个完整的例子,可以使窗体独立于分辨率,但是,你可以从这里获得逻辑。当您快速调整窗口大小时,以下代码会产生问题。

码:

private Size oldSize;
private void Form1_Load(System.Object sender, System.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 cnt, Size newSize)
{
    int iWidth = newSize.Width - oldSize.Width;
    cnt.Left += (cnt.Left * iWidth) / oldSize.Width;
    cnt.Width += (cnt.Width * iWidth) / oldSize.Width;

    int iHeight = newSize.Height - oldSize.Height;
    cnt.Top += (cnt.Top * iHeight) / oldSize.Height;
    cnt.Height += (cnt.Height * iHeight) / oldSize.Height;
}

否则,您可以使用任何第三方控件,如DevExpress工具。有LayoutControl提供相同的设施。您可以在运行时显示和隐藏任何控件而不留空格。


0
投票

查看自.NET 2.0以来可用的Control.Scale方法。

© www.soinside.com 2019 - 2024. All rights reserved.