转自http://www.cnblogs.com/KenBlove/articles/1281823.html
有时候你会发现本来好好的WinForm程序在别的机器上显示的尺寸就不对了。这些问题主要发生在背景图片、图片框、窗口布局上。那么那就很可能是因为WinForm的自动放缩功能。

因为不同语言的系统使用不同的缺省字体,相同字体的系统也可能使用不同的DPI(字符的每英寸点数),传统的Win32程序在不同的系统上经常遇到文本显示不全的问题。.NET的WinForm提供了自动放缩的功能来试图解决该问题。在v1.1里,Form有个AutoScale属性,但因错误地将放缩比例属性写成了整形,导致这套系统成了只能添乱的废物。在v2.0里,自动放缩系统被重新设计,并在Form的基类ContainerControl里加入了AutoScaleMode属性,提供几种不同的自动放缩模式,以便符合不同类型界面的需求:

1. Dpi: 控件根据相对设计时DPI的变化来放缩。常见的DPI有96和120。这种模式只对一些特定的图形控件有用。

2. Font: 控件根据相对设计时字体的变化来放缩。由于字体变化后宽和高的放缩比常常是不同的,所以这种方式会导致宽和高的不等比放缩。这个模式是Exe工程的缺省值。这对尽含有文本标签和系统控件的对话框很合适,但一旦有固定大小的控件或需要保持宽高比例的控件,就很容易毁掉原有的布局。

3. Inherit: 使用父控件的模式。这个选项经常用于自定义控件。

4. None: 不自动放缩。在其他模式无法实现合理的效果时,这是唯一的选择。

MSDN里有一条警告:不被支持在同一窗口里将DPI模式和Font模式混合使用。但据我的实际经验,自动放缩和窗口布局的Dock、Anchor有时也会有冲突。也就是说目前的自动放缩功能仍不够理想。

其实本来GDI+的设计目标之一就是要解决文本的放缩问题。但GDI+在实现它的全部功能前就已经停止开发,也没有得到硬件加速,而GDI却不断升级,以致GDI的文本功能远远超过GDI+。更糟糕的是有些文本,尤其是阿拉伯语系的,在GDI+下都不能正确显示或根本不显示。所以.NET 2.0的WinForm只能又重新回到GDI系统,包装了GDI的文本功能,也就是TextRenderer类,以便提供正确且更清晰更高效的文本显示。

(以上内容来自网络)

将 Form 设置为this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;

下边的控件都设置为

this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;

即可解决问题。

一句话知识:如何解决winform自动缩放产生的布局问题.的更多相关文章

  1. 解决WinForm屏幕缩放适配只需修改两个Form的两个属性

    最近要做一个windows下截屏识别文字的程序,调试发现截取的图像显示不完整. 输出了Screen.PrimaryScreen.Bounds.Width获取的值,结果与实际分辨率不同,所以确定了与我的 ...

  2. (译)Windows Azure的7月更新:SQL数据库,流量管理,自动缩放,虚拟机

    Windows Azure的7月更新:SQL数据库,流量管理,自动缩放,虚拟机 今早我们释出一些很棒的Windows Azure更新.这些新的提升包括:SQL数据库:支持SQL自动导出和一个新的高级层 ...

  3. 解决Delphi窗体缩放の疑难杂症

    http://anony3721.blog.163.com/blog/static/511974201082235754423/ 解决Delphi窗体缩放の疑难杂症 2010-09-22 15:57: ...

  4. JS自动缩放页面图片

    /** * 缩略图 * * @param bool isScaling 是否缩放 * @param int width 宽度 * @param int height 高度 * @param strin ...

  5. 解决NGUI自动被设置LYAER

    解决NGUI自动被设置LYAER uiwidget.cs1011行public void checklayer()这里修改 可以让LAYER不跟随父物体变动 但是这里有个问题 摄像机的CULL 不会被 ...

  6. 彻底解决Eclipse自动补全变量名及变量名后面追加类型名

    彻底解决Eclipse自动补全变量名问题的方法步骤 发布于 2014-11-04 14:53   已被阅读 31613159 次 大家使用eclipse或者MyEclipse敲代码的时候,是不是都被这 ...

  7. Windows窗口自动缩放机制

    通过自动缩放功能,能使在一个计算机上设计的界面在另一个具有不同分辨率或系统字体的计算机上能正常显示.这样窗体及其控件就能通过智能化调整大小以保障在本地电脑和用户电脑上保持一致. 自动缩放的必要性 如果 ...

  8. Android drawable的自动缩放

    今天在写程序时发现,一张图片被自动放大了,后来发现,这张图片放在了drawable-zh文件夹下,这个文件夹没有指定屏幕密度!于是将drawable-zh改为drawable-zh-nodpi,问题解 ...

  9. Android代码中动态设置图片的大小(自动缩放),位置

    项目中需要用到在代码中动态调整图片的位置和设置图片大小,能自动缩放图片,用ImageView控件,具体做法如下: 1.布局文件 <RelativeLayout xmlns:android=&qu ...

随机推荐

  1. jQuery 2.0.3 源码分析core - 整体架构

    拜读一个开源框架,最想学到的就是设计的思想和实现的技巧. 废话不多说,jquery这么多年了分析都写烂了,老早以前就拜读过, 不过这几年都是做移动端,一直御用zepto, 最近抽出点时间把jquery ...

  2. python进程池:multiprocessing.pool

    本文转至http://www.cnblogs.com/kaituorensheng/p/4465768.html,在其基础上进行了一些小小改动. 在利用Python进行系统管理的时候,特别是同时操作多 ...

  3. WPF自定义控件与样式(1)-矢量字体图标(iconfont)

    一.图标字体 图标字体在网页开发上运用非常广泛,具体可以网络搜索了解,网页上的运用有很多例子,如Bootstrap.但在C/S程序中使用还不多,字体图标其实就是把矢量图形打包到字体文件里,就像使用一般 ...

  4. Makefile

    原文链接:http://www.orlion.ga/816/ 一.基本规则 对于一个拥有多个文件的c项目,编译时可能是这样的指令: gcc main.c stack.c -o main 如果编译之后又 ...

  5. Android图片缓存之Bitmap详解

    前言: 最近准备研究一下图片缓存框架,基于这个想法觉得还是先了解有关图片缓存的基础知识,今天重点学习一下Bitmap.BitmapFactory这两个类. 图片缓存相关博客地址: Android图片缓 ...

  6. react+redux教程(三)reduce()、filter()、map()、some()、every()、...展开属性

    reduce().filter().map().some().every()....展开属性   这些概念属于es5.es6中的语法,跟react+redux并没有什么联系,我们直接在https:// ...

  7. 如何用perl将表格中不同列的数据进行拼凑,然后将拼凑后的数据用“|”连接在一起

    最近写了一个perl脚本,实现的功能是将表格中其中两列的数据进行拼凑,然后将拼凑后的数据用“|”连接在一起. 表格内容如下: 员工号码 员工姓名 职位 入职日期 1001 张三 销售 1980/12/ ...

  8. Microsoft.Office.Interop.Excel的用法以及利用Microsoft.Office.Interop.Excel将web页面转成PDF

    1.常见用法           using Microsoft.Office.Interop.Excel; 1)新建一个Excel ApplicationClass ExcelApp = New A ...

  9. 软件开发常用设计模式—单例模式总结(c++版)

    单例模式:就是只有一个实例. singleton pattern单例模式:确保某一个类在程序运行中只能生成一个实例,并提供一个访问它的全局访问点.这个类称为单例类.如一个工程中,数据库访问对象只有一个 ...

  10. maven 插件

    一直没注意看maven执行过程中的打印日志,今天突然发现一段话,说编译以及resource未指定编码,默认gbk.于是,百度了设置编码的方式: <plugin> <groupId&g ...