解决.net绘制的 WinForm 在 windows7下变形的方法

问题描述:
一个winform的系统,我和同事通过vss共同开发,同事的系统是XP,我的系统是windows7,开发工具都是vs.net2008 sp1。 
奇怪的是程序的主界面在同事的机器上正常,在他的vs.net设计视图中也显示正常,而到了我这里有的控件高度比设定的高度多出1-8个像素,f5运行也和实际效果不一样比实际效果大,查看 frmBase.designer.cs,里面控件的高度确实是原先设置的正确高度,但把vs.net切换到设计视图,这个控件高度就变大了,从“属性”窗口中看它的值也变大了。 
以前也出现过这种问题,最后在我的机器(windows7)下重新调整各控件的高度,这才使软件在xp和windows7下运行的界面大小一致。但最近这个问题有出现了,不知道是怎么回事。

解决方法: 
1、将主窗体的 AutoScaleMode 属性设置为 None,CTRL+S保存一下,在将其关闭。 
2、打开主窗体的 xxx.designer.cs,找到 InitializeComponent 方法中的倒数第二行“ this.ResumeLayout(false);”,将其删除。 
3、在打开主窗体,此时的控件大小就是designer.cs设置的大小。随便找个控件,用鼠标拖动其改变大小,然后在手工把大小设置为原来的大小。这样做的目的是让vs.net更新designer.cs并创建“this.ResumeLayout(false);”。 
4、搞定了,界面在xp和windows7上完全一样

这里说说AutoScaleMode属性的用法:

   ① None : 禁用自动缩放。(默认时)

   ② Font :根据类使用的字体(通常为系统字体)的维度控制缩放。

       如果希望控件或窗体根据操作系统中字体的大小进行拉伸或缩小,则按 Font 缩放十分有用,如果控件或窗体的绝对大小无关紧要,则应使用这种方式进行缩放。

例子:

新建一个winform,字体为 ‘宋体 9pt’,上面还有一个button,用来参考的.

然后,先改变winform的字体大少,就改为‘宋体 16pt’吧。

这时候,连按钮都变大了。。

   ③ Dpi : 根据显示分辨率控制缩放。常用分辨率为 96 和 120 DPI。

       如果要相对于屏幕确定控件或窗体的大小,则按 Dpi 缩放十分有用。例如,对于显示图表或其他图形的控件,可能希望使用每英寸点数 (DPI) 缩放,以便该控件始终占据一定百分比的屏幕

④ Inherit   : 根据类的父类的缩放模式控制缩放。如果不存在父类,则禁用自动缩放。

posted on 2012-09-19 21:38  咖啡色  阅读(753)  评论(0编辑  收藏  举报