一句话知识:如何解决winform自动缩放产生的布局问题.

转自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;

即可解决问题。

时间: 2024-11-10 00:03:31

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

android的viewport 解决网页自动缩放的问题

<meta name="viewport" content="width=device-width,initial-scale=1.0"> content属性值 : width:可视区域的宽度,值可为数字或关键词device-width height:同width intial-scale:页面首次被显示是可视区域的缩放级别,取值1.0则页面按实际尺寸显示,无任何缩放 maximum-scale=1.0, minimum-scale=1.0;可视区域的缩

转: 安卓自动缩放布局,解决屏幕适配问题

转:http://blog.csdn.net/ljh102/article/details/45536293 2015.8.4 更新: 增加参数custom:autoScaleType 设置缩放模式,可以设为“fitWidth”,"fitHeigth" 和 "fitInside".分别代表缩放至宽度匹配,缩放至高度匹配以及缩放至适合容器内部,默认为"fitInside". 做过安卓开发的都知道,屏幕适配是一件非常困难的事情. Google官方的解

解决winform应用程序在不同分辨率系统下界面错乱的问题

首先,遇到的问题是这样的,当已经ok的程序在我电脑上运行时出现了界面很小,而且错乱无章的情况,如下图: 记得上一次我的解决办法是每个控件每个控件拖动修改,到最后perfect!可是??修改之后呢?半天时间没有了,要做的事没有挪动一步..... 后来在网上查了查这是什么原因: 问题分析: 产生界面混乱的主要原因是,winform程序的坐标是基于点(point)的,而point与DPI(分辨率,每英寸所打印点数)相关,一英寸等于72 Point,当DPI发生变化时,显示在界面上的尺寸根据DPI自动变

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

http://anony3721.blog.163.com/blog/static/511974201082235754423/ 解决Delphi窗体缩放の疑难杂症 2010-09-22 15:57:54|  分类: 默认分类 |  标签:delphi  |举报|字号 订阅 下载LOFTER我的照片书  | No.1 Delphi中如何限制窗体大小? Delphi中可以限制窗体或者元件的大小,只要指定它的Constraints属性即可(默认是0,就是不限制).但是Delphi这个属性有个很大的缺

C#/winform 自动触发鼠标、键盘事件

要在C#程序中触发鼠标.键盘事件必须要调用windows函数. 一.鼠标事件的触发 1.引用windows函数mouse_event /// <summary> /// 鼠标事件 /// </summary> /// <param name="flags">事件类型</param> /// <param name="dx">x坐标值(0~65535)</param> /// <param

用 ERD 盘解决 Win8 自动更新后不能启动的问题

有安装了 Win8 x64 系统的台式机,在自动更新后无法启动了,在黑屏的情况下,没有反应了. 安全模式也无法进入系统. 几经周折,发现: 在没有反映的时候,只要把 ERD 盘(Win 8 x86)放到光驱中,就能完成启动. 但是,由于是在黑屏的情况下,也不知道到底是少了什么文件. 用 ERD 盘解决 Win8 自动更新后不能启动的问题

百度地图API 级别自动缩放

今天做一个基于百度地图API的小项目 查了很长时间apid都没有找到地图呈现出来的时候地图按坐标的多少自动缩放显示的等级比例,特此记录笔记!var points = [point1, point2,point3]; var view = map.getViewport(eval(points)); var mapZoom = view.zoom; var centerPoint = view.center; map.centerAndZoom(centerPoint,mapZoom);

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

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

C# 控件随窗口大小变化自动缩放

1 要想控件随窗口大小变化自动缩放,就要重写Resize函数就可以实现了. protected override void OnResizeEnd(EventArgs e) { base.OnResizeEnd(e); Size endSize = this.Size; float percentWidth = (float)endSize.Width / _beforeDialogSize.Width; float percentHeight = (float)endSize.Height /