可以准备windows窗体窗口以根据窗口大小调整所有元素的大小/位置,但我正在尝试做一些不同的事情。
有没有可能以某种方式实际缩放窗口以及其中的所有元素,而不管它们的位置、属性等?
基本上就像你在一些图形编辑器中缩放图片的方式一样--你可以拉伸或缩小它,但图片上的内容并不重要。
那么,有没有可能对表单做类似的事情呢?无论表单中包含什么内容,都可以缩放其大小。
发布于 2014-04-01 17:21:20
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;
}否则,您可以使用任何第三方控件,如DevExpress工具。还有LayoutControl也在提供同样的设施。您可以在运行时显示和隐藏任何控件,而不会留下空白。
发布于 2019-08-24 09:22:44
您的窗体具有缩放属性。您可以直接设置此属性,它将同时影响窗体上的每个控件。
float scaleX = ((float)formNewWidth / formBaseWidth);
float scaleY = ((float)formNewHeight / formBaseHeight);
this.Scale(new SizeF(scaleX, scaleY));将其放入您的resize事件中。
发布于 2018-03-01 19:12:34
查看自.NET 2.0以来可用的Control.Scale方法。
https://stackoverflow.com/questions/22780571
复制相似问题