可以根据窗口大小准备窗体窗口窗口来调整所有元素的大小/重新定位,但我正在尝试做一些不同的事情。
是否有可能以某种方式实际缩放窗口以及内部的所有元素,而不管它们的位置,属性等?
基本上你在一些图形编辑器中缩放图片的方式 - 你可以拉伸或缩小它,但是那张图片上的内容并不重要。
那么,是否有可能与表格做类似的事情?无论表格内部是什么,都可以扩展其大小。
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提供相同的设施。您可以在运行时显示和隐藏任何控件而不留空格。
查看自.NET 2.0以来可用的Control.Scale方法。