产生界面混乱的主要原因是,winform程序的坐标是基于点(Point)的,而Point又与DPI相关。
一英寸 = 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的的构造函数中作如下设置即可:
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)));
}
这样设置之后,在不同的DPI下,界面将整体缩放而不会凌乱,利用的就是DPI本身的特性。
1

站心网
产生界面混乱的主要原因是,winform程序的坐标是基于点(Point)的,而Point又与DPI相关。一英寸 = 96pixels9..
为您推荐
详解:订单履约系统规划
系统架构
2025年03月15日
大家好,我是汤师爷~什么是订单履约系统?订单履约是从消费者下单支付到收到商品的全流程管理过程,包括订单接收、订单派单、库存分配、仓储管理和物流配送等环节,核心目标是确保商品准时、准确地送达消费者手中。..

LinkWeChat开源系统
程序笔记
2024年11月13日
平台介绍LinkWeChat是一款基于企业微信的开源SCRM系统,为企业构建私域流量系统的综合解决方案,显著提升企业社交运营效率!内置功能环境部署准备工作JDK >= 1.8 (推荐1.8版本)Mysql >= 5.5.0 (推荐5.7版本)Redis >=..
每一个程序员,都希望能成为分布式系统架构师
程序笔记
2024年11月07日
有很多读者经常问我,程序员的学习、成长之路应该怎么规划,才能早日成为一名架构师。作为一个曾经的架构师,在我走上技术管理这条路之后,管理的团队越来越大,现在我管理的技术团队有一百多人,最大的体会就是操心..

鸿蒙OpenHarmony系统可以运行跨平台的.NET Core吗?
程序笔记
2024年11月05日
鸿蒙(HarmonyOS)和 OpenHarmony 系统本身并不原生支持直接运行 .NET Core,但可以通过一些方法使 .NET Core 应用在其上运行。鸿蒙和 OpenHarmony 是基于 LiteOS 和 Linux 内核的多终端操作系统,因此它们的运行时..
系统架构7个非功能性需求
程序笔记
2024年10月05日
在软件系统里面,功能性需求是面向用户、详细明确的需求,由产品人员根据市场的需要提炼出来,是产品生命周期里最重要的一环。比如电商系统里面的优惠券功能,通常包含需求:优惠券分类、细分领券人群、核销优惠券等..
Quartz.NET-面向.NET的开源作业调度系统
程序笔记
2024年10月03日
什么是Quartz.NETQuartz.NET是一个流行的开源作业调度框架,可以用于在.NET应用程序中进行作业调度。它是Quartz调度器的.NET实现,提供了高度可定制化的作业调度功能,支持复杂的作业调度需求。Quartz.NET可以让您创..

C# Winform使用DataGridView显示表格数据
程序笔记
2024年09月26日
DataGridView的常见应用DataGridView是.NET框架中用于显示、编辑和操作数据表格的控件。它提供了一个灵活的方式来显示和操作大量的数据。以下是对DataGridView的一些常见应用和实现的总结:数据显示:DataGridView可..
支持多种不同类型的数据库管理工具分享
程序笔记
2024年09月20日
有许多数据库管理工具可以支持多种不同类型的数据库。以下是一些常见的支持多种数据库的数据库管理工具:DBeaver: DBeaver是一个开源的数据库管理工具,支持多种数据库系统,包括MySQL、PostgreSQL、Oracle、SQL Se..

DevEco Studio鸿蒙OS系统开发环境搭建详解
程序笔记
2024年09月17日
DevEco Studio 是华为推出的一款面向华为终端全场景多设备的集成开发环境(IDE),为开发者提供工程模板创建、开发、编译、调试、发布等E2E的HarmonyOS应用开发服务。DevEco Studio官网:https://developer.harmonyo..

.NET生态系统有哪些构成?
程序笔记
2024年09月09日
.NET生态系统是一个庞大而多样化的生态系统,涵盖了许多工具、框架、库和技术。以下是.NET 生态系统中的一些主要构成部分:1. 编程语言:C#:最常用的.NET 语言之一,用于开发各种类型的应用程序。F#:函数式编程语..
.NET架构师技术要求:掌握.NET平台和架构设计能力
程序笔记
2024年09月07日
作为一个.NET架构师,你需要具备以下技术要求:精通.NET平台:作为.NET架构师,你应该对.NET平台和相关技术栈有深入的理解,包括.NET Framework和.NET Core。你应该熟悉.NET编程语言,如C#,以及相关的.NET开发工具..
在分布式系统中,如何实现数据一致性和可靠性?
程序笔记
2024年09月06日
在分布式系统中实现数据一致性和可靠性是一项重要的任务,以下是我在.NET分布式系统开发中的一些实践经验:使用分布式事务:在涉及多个数据源或服务的操作中,使用分布式事务可以确保数据的一致性。在.NET中,可以使..
winform最小化到系统托盘
程序笔记
2024年09月05日
在 WinForms 中,你可以实现将应用程序最小化到系统托盘的功能。以下是实现该功能的一般步骤:添加命名空间引用:确保你的项目中引用了以下命名空间:using System.Windows.Forms;创建一个 NotifyIcon 控件:在你的..
winform右击NotifyIcon显示菜单
程序笔记
2024年09月05日
在 WinForms 中,你可以通过以下步骤实现在右击 NotifyIcon 时显示菜单:添加命名空间引用:确保你的项目中引用了以下命名空间:using System.Windows.Forms;创建一个 ContextMenuStrip 控件:在你的主窗体中添加一..
C#中如何获取当前系统CPU的核心数
程序笔记
2024年08月28日
在C#开发中,有时候我们需要获取当前系统CPU的核心数,关于CPU的核心数,主要有物理处理器(Physical Processors)的个数、CPU核心(Cores)的个数和逻辑处理器(Logical Processors)的个数三种。比如,使能了超线..

网页内容很少时让footer处于最下方
程序笔记
2024年08月28日
要实现在内容很少时保持 footer 在最下方,而内容很多时在所有内容底部,可以使用CSS的Flex布局。这样可以确保在页面内容不足以填满整个视口时,footer 保持在视口底部,而在内容超出视口时,footer 在所有内容底部..
C#获取Windows系统中所有已安装软件的名称和版本号
程序笔记
2024年08月22日
需求在Windows中使用C#做软件开发,有时候需要获取当前系统中已安装的软件及其版本号,接下来就简单介绍一下,如何通过C#获取来实现。示例代码已安装的软件,在注册表中都会有软件信息和卸载信息,我们只需要扫描注..

在64位的Windows系统下运行32位的C#程序如何控制重定向
程序笔记
2024年08月22日
前言在64位的Windows操作系统中,为了兼容32位程序的运行,并且让32位程序在64位的操作系统中不仅能操作关键文件文夹和关键的注册表,并且又要避免与64位程序的冲突,64位的操作系统采取了重定向机制。32位和64位相..

怎样在Linux系统 Ubuntu18.04 中安装微信
程序笔记
2024年08月21日
摘要微信是一款非常流行和广泛使用的通信工具,支持语音,图片,视频。可以说,微信已经深入人们生活,不论工作,学习,购物,资讯,构建了一个生态圈,每天几乎所有网名都在使用微信。微信官方并未提供Linux系统正..
C# Winform系统托盘图标动态闪烁
程序笔记
2024年08月21日
当在即时通信软件上收到消息时,任务栏的右下端会有一个图标在不停的闪烁,单击它就可打开信息浏览。本实例模拟信息提示功能,当在主窗体中单击“闪烁”按钮时,出现图标进行闪烁;当单击“停止&rdqu..