首先,,遇到的问题是这样的,当已经ok的措施在我电脑上运行时呈现了界面很小,而且错杂无章的情况,如下图:
记得上一次我的解决步伐是每个控件每个控件拖动改削,到最后perfect!可是??改削之后呢?半天时间没有了,要做的事没有挪动一步。。。。。
后来在网上查了查这是什么原因:
孕育产生界面混乱的主要原因是,winform措施的坐标是基于点(point)的,而point与DPI(辨别率,每英寸所打印点数)相关,一英寸即是72 Point,当DPI产生变革时,显示在界面上的尺寸按照DPI自动变革,导致界面与设计之初孕育产生错杂。
解决方案方案一:操作AutoScaleMode属性,将窗体的AutoScaleMode属性设置为DPI。
DPI:按照现实辨别率控制缩放,常用辨别率为 96 和 120 DPI.
Font : 按照类使用的字体(凡是为系统使用的字体)的维度控制缩放。
Inherit:按照类的父类的缩放模式控制缩放。如果不存在父类,则禁用自动缩放。
None: 禁用自动缩放。
方案二: 借鉴web措施中以pixel(像素)为常用单位,在winform 措施中使用像素来定位,在form的结构函数中将窗体的AutoScaleMode属性设置为Front.
private void InitializeComponent() { //设定按字体来缩放控件 this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; //设定字体巨细为12px this.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Pixel, ((byte)(134))); } 给与方案二变动后的效果;功效来看,有个别控件未到达期望的效果。但对比之前真的是调解改进很多。比我当月朔个个拖动改削要明智的多。
方案三 :记录下1920*1080辨别率下事情区域的Width和Height,记作DefaultWidth和DefaultHeight,用转变辨别率之后的事情区域的Width和Height去分袂除以DefaultWidth和DefaultHeight,得到缩放比例,再调解主界面和各控件的缩放。
public class AutoReSizeForm { static float SH { get { return (float)Screen.PrimaryScreen.Bounds.Height / DefaultHeight; } } static float SW { get { return (float)Screen.PrimaryScreen.Bounds.Width / DefaultWidth; } } public static void SetFormSize(Control fm) { fm.Location = new Point((int)(fm.Location.X * SW), (int)(fm.Location.Y * SH)); fm.Size = new Size((int)(fm.Size.Width * SW), (int)(fm.Size.Height * SH)); fm.Font = new Font(fm.Font.Name, fm.Font.Size * SH,fm.Font.Style,fm.Font.Unit,fm.Font.GdiCharSet,fm.Font.GdiVerticalFont); if (fm.Controls.Count!=0) { SetControlSize(fm); } } private static void SetControlSize(Control InitC) { foreach (Control c in InitC.Controls) { c.Location = new Point((int)(c.Location.X * SW), (int)(c.Location.Y * SH)); c.Size = new Size((int)(c.Size.Width * SW), (int)(c.Size.Height * SH)); c.Font = new Font(c.Font.Name, c.Font.Size * SH, c.Font.Style, c.Font.Unit, c.Font.GdiCharSet, c.Font.GdiVerticalFont); if (c.Controls.Count != 0) { SetControlSize(c); } } } }