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

gisoracle gisoracle     2022-08-13     138

关键词:


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

即可解决问题。

如何检索 WinForms PictureBox 的缩放因子?

】如何检索WinFormsPictureBox的缩放因子?【英文标题】:HowtoretrievezoomfactorofaWinFormsPictureBox?【发布时间】:2012-05-1511:01:16【问题描述】:我需要鼠标指针在PictureBox上的精确位置。我使用PictureBox的MouseMove事件。在这个PictureBox上,我... 查看详情

halcon的hwindowcontrol控件在winform程序中的使用介绍(重点解决图片缩放的问题)

  Halcon的HWindowControl控件在WinForm程序中的使用介绍(重点解决图片缩放的问题) 2016-12-0420:11 362人阅读 评论(4) 收藏 举报 分类:Halcon版权声明:本文为博主原创文章,未经博主允许不得转载。 目... 查看详情

c#winform设置窗体自动缩放适应不同尺寸的电脑屏幕大小

由于要用winform开发一个桌面安装版考试软件,用户量也比较多,所以很多用户反映软件的界面经常超出屏幕,部分功能或内容无法显示完整。软件界面有几个设置大小固定为宽1066,高718。我本机的开发电脑是宽屏的&#x... 查看详情

winform中如何让控件随窗口按比例缩放

我的窗口最大化以后控件还是原来的大小和位置怎么能一起变化参考技术A你设一下你控件的anchor和dock两个属性,可以达到你满意的组合效果。包括位置和大小比例变化。 查看详情

如何水平自动缩放 Kubernetes 部署

】如何水平自动缩放Kubernetes部署【英文标题】:HowtoHorizontalAutoscaleraKubernetesDeployment【发布时间】:2019-08-2921:19:50【问题描述】:编辑:解决方案:我忘记将target_cpu_utilization_percentage添加到autoscaler.tf文件中我想要一个在Kubernetes... 查看详情

如何将图像居中和自动缩放?

】如何将图像居中和自动缩放?【英文标题】:Howtobothcenterandauto-scaleanimage?【发布时间】:2012-03-0903:16:44【问题描述】:可能是CSS布局最常见的两个问题:水平和垂直居中。将图像自动缩放到视口大小(保持纵横比,不会垂直或... 查看详情

c#winform程序自动适应显示器分辨率

...anel在tableLayoutPanel里面就是不缩放。参考技术A这个问题在winform里面很难解决的,是winform的一个令人头疼的弊端,现在基本上淘汰了。用WPF开发C/S程序的比较多 参考技术B都用WPF开发了.知道WPF方式,觉得WinForm布局很不合理.而且.Win... 查看详情

如何将我的自动缩放组连接到我的 ecs 集群?

】如何将我的自动缩放组连接到我的ecs集群?【英文标题】:HowcanIconnectmyautoscalinggrouptomyecscluster?【发布时间】:2016-05-1404:21:12【问题描述】:在所有ECS教程中,您需要创建一个集群,然后创建一个自动扩展组,这将产生实例。... 查看详情

为啥在 MongoDB 中缩放时自动增量模式不好?

...ncrementpatternisbadwhenscaling。我也读过thisarticle。里面有这么一句话:相反,您需要使用正确的U 查看详情

如何使用选择图例(matplotlib)自动缩放图形?

】如何使用选择图例(matplotlib)自动缩放图形?【英文标题】:Howtoautoscaledgraphswithpickinglegend(matplotlib)?【发布时间】:2020-09-1618:23:29【问题描述】:我正在使用matplotlib制作一个采摘图例。目标是通过单击图例隐藏和显示曲线。... 查看详情

如何自动缩放mapView以显示覆盖

】如何自动缩放mapView以显示覆盖【英文标题】:howtoautomaticallyzoommapViewtoshowoverlay【发布时间】:2019-11-0509:10:44【问题描述】:我可以在mapView上绘制多边形,但是我需要找到多边形并手动缩放它。有没有办法自动完成这个过程,... 查看详情

自动缩放 TextView 文本以适应范围 - 如何调用?

】自动缩放TextView文本以适应范围-如何调用?【英文标题】:AutoScaleTextViewTexttoFitwithinBounds-Howtocall?【发布时间】:2012-02-2622:58:45【问题描述】:新手Java问题-在AutoScalingtheText视图的所有帖子中,没有人指出您实际如何使用提供的... 查看详情

c#winform如何让窗体能根据显示器大小自动调节大小呢?

...追问你设定最大也是超出17寸的显示范围了我定义了这么一句话this.Location=newPoint(Screen.PrimaryScreen.Bounds.Width-1540,Screen.PrimaryScreen.Bounds.Height-935);追答没有啊,WinForms里面设定最大就是按照显示器的实际大小进行窗口的最大化,不可... 查看详情

在 VS2017 Winforms 应用程序中存在 IDE 缩放问题

】在VS2017Winforms应用程序中存在IDE缩放问题【英文标题】:HaveaIDEScalingissueinVS2017WinformsApplication【发布时间】:2019-01-0115:12:40【问题描述】:我已经用谷歌搜索了这个,但无法准确找到我需要的东西。所以我会在这里展示它,看... 查看详情

c#如何使winform程序自适应屏幕分辨率显示

参考技术A将Form的WindowState属性设置为Maximized就OK了 参考技术Bform的属性windowsState设置为Maximized同时控制form下的控件的dock属性(上下左右什么的),避免在分辨率放大或缩小时,位置偏移。另外:注意控制一下form的属性MaximumSize&... 查看详情

云中的自动缩放是不是始终是正确的解决方案[关闭]

】云中的自动缩放是不是始终是正确的解决方案[关闭]【英文标题】:IsAuto-ScalinginCloudalwaystherightsolution[closed]云中的自动缩放是否始终是正确的解决方案[关闭]【发布时间】:2018-01-2514:34:21【问题描述】:尽可能使用自动缩放是... 查看详情

winform中datagridview列隐藏时会触发啥事件?

winform中DataGridView列隐藏时会触发什么事件?DataGridView中如果通过代码将某一列隐藏时,会触发什么事件?并且这个捕获这个事件时,能获取到隐藏的是哪一列参考技术A重新绑定时,先将datagridview设置为禁止自动增长列,再绑定... 查看详情

WinForms:如何显示 Usb3 Vision 网络摄像头的输出

】WinForms:如何显示Usb3Vision网络摄像头的输出【英文标题】:WinForms:HowtoshowoutputofUsb3Visionwebcam【发布时间】:2021-12-2111:12:20【问题描述】:我的任务是尽快显示来自相机的帧。相机是BaslerDart,每秒可以产生超过70帧。不幸的是它... 查看详情