c# winform程序.在控制面板中调整了DPI设置显示异常

更改了DPI设置后,文字放大.原先的窗体控件布局就乱套了.怎么才能解决这一问题?... 更改了DPI设置后,文字放大.原先的窗体控件布局就乱套了.怎么才能解决这一问题? 展开
 我来答
shihoumacili
高粉答主

2016-02-04 · 每个回答都超有意思的
知道大有可为答主
回答量:1.1万
采纳率:87%
帮助的人:467万
展开全部

问题分析:

         产生界面混乱的主要原因是,winform程序的坐标是基于点(Point)的,而Point又与DPI相关,具体就是

         一英寸 =72Points

一英寸 =  96pixels96DPI是windows的默认DPI,当它被用户更改后,可能就会导致界面与设计之初产生了错乱。

       在网上搜索相关资料后,试着将this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi 但是经实测后,发现仍然没有解决问题:有些界面甚至显示不全;有些控件甚至会被“截断”或完全不显示。

       原因是:默认情况下winfrom的Font单位是Point,最终显示在界面上的尺寸将根据DPI设置自动变化,可以表示为公式: Point / 72 * DPI = Pixel 按照MSDN的解释,上述设置比较适合关心程序的可视区域及控件文字在不同的DPI下总是显示设计时的大小,而不用关心程序界面的绝对大小的情况。

解决办法:

        后来想到web程序中的常用单位是像素(pixel),在不同的机器上也能很好地呈现网页布局。在winform程序中使用像素来定位即可解决。

        在winform中实现该计量单位,仅需要在Form的的构造函数中作如下设置即可:

[csharp] view plain copy
  1. private void InitializeComponent()  
  2. {              
  3.             //设定按字体来缩放控件  
  4.             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;  
  5.             //设定字体大小为12px       
  6.             this.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Pixel, ((byte)(134)));  
  7. }  

        这样设置之后,在不同的DPI下,界面将整体缩放而不会凌乱,利用的就是DPI本身的特性。

百度网友ce7f3ccb4
推荐于2017-11-27 · TA获得超过1950个赞
知道大有可为答主
回答量:2299
采纳率:0%
帮助的人:1883万
展开全部
在窗体加载的时候,在初始化里面加这句!!
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)));
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式