首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不同分辨率下的Windows窗体大小问题

不同分辨率下的Windows窗体大小问题
EN

Stack Overflow用户
提问于 2014-03-18 21:04:10
回答 2查看 11.2K关注 0票数 2

我是window窗体开发的新手,在开发了一些窗体后,我注意到窗体在不同的分辨率下不能正确显示,在某些分辨率下窗体超出屏幕

我想知道有没有可以根据分辨率自动调整表单的设置,或者有什么技巧或技巧可以用来设计表单。

请详细说明您的答案,因为我对windows窗体开发非常熟悉。

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-20 00:38:07

这里的问题更有可能是它没有按照您预期的方式工作。在WinForms开发中,当您设计一个窗体时,实际上是在设置它的大小。这遵循正在显示表单的机器上的默认字体大小的函数,并且与所讨论的显示器上的分辨率没有直接关系。因此,如果您设计一个包含多个控件或大型控件的大型窗体,它可能在高分辨率下显示良好,但在低分辨率下显示不佳。要更好地了解此大小,请查看您的Form1.Designer.cs文件,您将看到为控件设置的大小值。这些大小并不等同于像素,但它们应该给你一个相对的大小。您可能还应该在MSDN或其他地方研究对话单元。

您可以在form load事件中编写一些代码来响应该解析,但最终大小将受到需要显示的小部件数量的部分限制。如果您有一个多行编辑字段、网格控件、树控件或其他一些大的小部件,您可以根据当前的显示分辨率自动调整它的大小,同时调整窗口的大小。但这是一个基于你的需求的特定于应用程序的决定,这就是为什么windows不会尝试自动调整大小。

如上所述,WPF提供了更灵活的表单定义模型,并且可以更好地响应重新对齐小部件,但最终如果您的表单足够忙,WPF表单在较低的分辨率上也会出现同样的问题。

票数 1
EN

Stack Overflow用户

发布于 2015-11-16 00:00:40

你可以在load事件中循环窗体上的每个控件,并重新缩放它们和窗体本身,缩放比例是为其设计窗体的屏幕尺寸与应用程序正在处理的屏幕尺寸之间的比率。

代码语言:javascript
复制
    //this is a utility static class
    public static class Utility{


    public static void fitFormToScreen(Form form, int h, int w)
    {

        //scale the form to the current screen resolution
        form.Height = (int)((float)form.Height * ((float)Screen.PrimaryScreen.Bounds.Size.Height / (float)h));
        form.Width = (int)((float)form.Width * ((float)Screen.PrimaryScreen.Bounds.Size.Width / (float)w));

        //here font is scaled like width
            form.Font = new Font(form.Font.FontFamily, form.Font.Size * ((float)Screen.PrimaryScreen.Bounds.Size.Width / (float)w));

        foreach (Control item in form.Controls)
        {
            fitControlsToScreen(item, h, w);
        }

    }

    static void fitControlsToScreen(Control cntrl, int h, int w)
    {
        if (Screen.PrimaryScreen.Bounds.Size.Height != h)
        {

            cntrl.Height = (int)((float)cntrl.Height * ((float)Screen.PrimaryScreen.Bounds.Size.Height / (float)h));
            cntrl.Top = (int)((float)cntrl.Top * ((float)Screen.PrimaryScreen.Bounds.Size.Height / (float)h));

        }
        if (Screen.PrimaryScreen.Bounds.Size.Width != w)
        {

            cntrl.Width = (int)((float)cntrl.Width * ((float)Screen.PrimaryScreen.Bounds.Size.Width / (float)w));
            cntrl.Left = (int)((float)cntrl.Left * ((float)Screen.PrimaryScreen.Bounds.Size.Width / (float)w));

                cntrl.Font = new Font(cntrl.Font.FontFamily, cntrl.Font.Size * ((float)Screen.PrimaryScreen.Bounds.Size.Width / (float)w));

        }

        foreach (Control item in cntrl.Controls)
        {
            fitControlsToScreen(item, h, w);
        }
    }
    }


        //inside form load event
        //send the width and height of the screen you designed the form for
        Utility.fitFormToScreen(this, 788, 1280);
        this.CenterToScreen();
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22480272

复制
相关文章

相似问题

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