首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >缩放窗口窗体窗口

缩放窗口窗体窗口
EN

Stack Overflow用户
提问于 2014-04-01 16:30:43
回答 3查看 12.1K关注 0票数 5

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

有没有可能以某种方式实际缩放窗口以及其中的所有元素,而不管它们的位置、属性等?

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

那么,有没有可能对表单做类似的事情呢?无论表单中包含什么内容,都可以缩放其大小。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-04-01 17:21:20

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

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

代码:

代码语言:javascript
复制
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也在提供同样的设施。您可以在运行时显示和隐藏任何控件,而不会留下空白。

票数 7
EN

Stack Overflow用户

发布于 2019-08-24 09:22:44

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

代码语言:javascript
复制
float scaleX = ((float)formNewWidth / formBaseWidth);
float scaleY = ((float)formNewHeight / formBaseHeight);
this.Scale(new SizeF(scaleX, scaleY));

将其放入您的resize事件中。

票数 3
EN

Stack Overflow用户

发布于 2018-03-01 19:12:34

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22780571

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档