我用的windows10,visual studio 2015,基于.net framework 4,写桌面程序,一个普通的winform窗体,里面有一些常用的诸如label,button,combobox控件,有些用的默认字体,有些我设置了稍大的字体,比如12pt,18pt什么的。问题是在另外一台电脑上发现,存在控件重叠啊被阻挡啊等等问题,看了网上资料,应该和分辨率、DPI等有关,然后,我试过把窗体的AutoScaleMode为None、Font、Dpi和Inherit,好像都是存在这个问题的,也就是另外一台电脑还是窗体中的显示布局乱了。我的原始设想,首先,我无所谓分辨率大小,因为我将窗体设置为用户无法调整大小(controlbox为false),而且size足够小,主流显示器分辨率都能足够显示我的窗体(换句话说,过小的显示器分辨率,不在我的考虑支持范围之内)。然后,我希望,不管系统DPI怎么改变,我的程序,在所有系统中运行的行为,就好像是在我的开发机上表现得那样(或者差不多也可以,每个控件我可以稍微留一点余量),不知道是否可以做到?谢谢。我试过在开发机上调整DPI,比如从100%修改为125%,重启,然后,好像也是正常显示的。有点晕了,到底问题的关键是什么呢?显示器分辨率(以像数为单位),DPI(Dots Per Inch,不知道Dots在这里就是被解释为Pixels吗), font size(以Pt为单位,这是个物理尺寸单位还是像数单位?),显示器物理尺寸(比如以inch为单位),还有form size(是以像数为单位吗),之间的换算关系到底是什么呢?然后windows有主动帮忙做了哪些自动调整?然后,可能我才能明白我能如何解决这个问题,谢谢。

解决方案 »

  1.   

    Form.AutoScale = false
      

  2.   

    anchor=None
      

  3.   

    每一个桌面都可以自定义各种窗口元素的字体等等设置,你学习一下 windows 操作系统主题基本用法。开发时通常只要针对最标准的 windows 主题进行设置。对于什么分辨率、各种(例如窗体标题、正文、下拉框等等)字体的设置不可能胡乱纠结某种固定比例。每一个用户都有可能自己去修改设置的。
      

  4.   

    另外,即使是 windows 标准、默认的主题,字体大小也不一样。例如在 xp 上看起来合适的字体,在 windows7 下可能就会变大一点点。所以开发时通常只要使用标准 windows 主题来开发测试,稍微留出富裕空间(千万不要荒唐地纠结什么固定的大小比率),就行了。
      

  5.   

    无论是拖放的控件还是语句写的动态控件,从来不回有这样的问题,况且我还在7和10之间来回开发同一个软件,在7里面只有显示大一点,布局是不回乱的,看你把控件一些属性如何设置的问题了.一般如停靠,跟随,尺寸,布局,初值.
    https://blog.csdn.net/xianfajushi/article/details/83867006看我这篇文章.
      

  6.   

    每一个桌面都可以自定义各种窗口元素的字体等等设置,你学习一下 windows 操作系统主题基本用法。开发时通常只要针对最标准的 windows 主题进行设置。对于什么分辨率、各种(例如窗体标题、正文、下拉框等等)字体的设置不可能胡乱纠结某种固定比例。每一个用户都有可能自己去修改设置的。 直接告诉答案就行吧,,这些太专业了
      

  7.   

    Anchor和Dock属性检查下
      

  8.   

    你不知道每一个 windows 桌面都可以设置各自的主题、各自窗口里各种不同元素的默认字体、大小等等个性化设置吗?
      

  9.   

    多学学 windows 如何进行个性化设置,就算是程序员,不学习 windows 基本使用方法也不行。
      

  10.   

    win10 的显示系统是基于 DriverX 的
    vs 的布局是基于 GDI 的
    当然两套系统间存在简单的比例关系,也就是可以相互转换的看了好几遍主贴,一直没搞清楚楼主究竟遇到了什么问题
    再随意的布局,都不会在不同分辨率下出现混乱。不同分辨率只会造成部件的视觉尺寸不同,并不会改变部件间的比例关系
    显然是楼主一厢情愿的做了某种安排(并且是错误的),却将问题归咎于分辨率的变化
      

  11.   

    谢谢各位大佬,我再在自己开发机上试了不同分辨率,不同DPI,好像布局上都没有特别变化。不知道出问题的机器,到底是什么样的区别,使得界面乱了,找到原因后再回来汇报。ps:我的程序就是拖了控件到窗体里面,然后有些label也是通过设计界面修改的字体,没有做过任何其他的安排。
      

  12.   

    我看网上的资料,感觉和这两个问题差不多,但是没有看明白到底怎么回事可以怎么解决。https://stackoverflow.com/questions/13185557/my-windows-forms-application-size-is-changing-on-different-notebooks
    https://stackoverflow.com/questions/12123073/winforms-different-sizes-in-different-environments主要目前我还没有可以复现问题的机器环境,那个有问题机器我就看了个截图
      

  13.   


    我看了一下,这个属性就是默认false的
      

  14.   

    研究了一下,发现有问题机器的分辨率是 1280*1024, 150%放大倍数。 而我的开发机是 1920*1080, 100%放大倍数。 当我把开发机设置为1280*1024,125%的时候,发现部分label确实有问题(我的有些label是多行的,所以label的autosize设置为了false),但是,也不是所有问题都复现的。想换个角度问,就是说,为了尽可能在不同的windows系统中可用,form的AutoScaleMode应该怎么设置呢? none,dpi,还是font的。特别的,不理解font和dpi的设置。
      

  15.   

    是不理解font和dpi设置的区别是什么。
      

  16.   

    在10里面改变从100-175%之间进行切换,未发现布局变化。
    我的TextBox也是设置为多行。
    AutoScaleMode这个属性从来就不用去弄,都是默认的就没出现过问题。
      

  17.   

    建议设置为none
    原因是font和dpi的设置对应的是两个windows特性:
    基于dpi的缩放基于字体放大的缩放
    在windows8以前是没有基于dpi的缩放的,但是在Windows8之后对基于文本的缩放做的又不好。
    所以建议你关闭缩放自己内部使用类似zoom的东西对你的窗口进行一次性的变更,你这个情况很适用我之前发的一篇帖子:
    https://bbs.csdn.net/topics/392344412当然你也可以看看微软的解决方案,尝试新方法,但是这需要的时间就比较多了:
    https://bbs.csdn.net/topics/392396889
      

  18.   

    建议设置为none
    原因是font和dpi的设置对应的是两个windows特性:
    基于dpi的缩放基于字体放大的缩放
    在windows8以前是没有基于dpi的缩放的,但是在Windows8之后对基于文本的缩放做的又不好。
    所以建议你关闭缩放自己内部使用类似zoom的东西对你的窗口进行一次性的变更,你这个情况很适用我之前发的一篇帖子:
    https://bbs.csdn.net/topics/392344412当然你也可以看看微软的解决方案,尝试新方法,但是这需要的时间就比较多了:
    https://bbs.csdn.net/topics/392396889
    谢谢,看了你的代码,感觉要解决的问题,和我稍微有点不同。大致来说,我这边控件相对位置没有那么重要,问题是在,单个控件内部的文字被截断或者换行了。
      

  19.   


    我一开始也都是用的默认,发现有些系统说问题,然后网上搜索了一下,看到要设置为none,没有想到,none后其实问题还是在有些系统中存在的
      

  20.   

    这样也说不清楚,这样,我给个近期开发的软件,拿到有问题的电脑上运行一下看控件布局是否变化?
    https://pan.baidu.com/s/1o_JuItFWuzoFbC9iO3c5uw
      

  21.   

    或是使用我这里代码复制运行一下看看https://blog.csdn.net/xianfajushi/article/details/83867006
      

  22.   

    文字被截断或换行,还是布局问题,在resize方法调整吧
      

  23.   

    没遇到过,另外,winform的话,不用限制窗口大小,布局多用panel组合,dock,锚点,比如或者用wpf,wpf可以解决dpi不同的问题