C# 我可以提高Windows窗体的分辨率/DPI吗?(扩大控制的一些方法?)

C# 我可以提高Windows窗体的分辨率/DPI吗?(扩大控制的一些方法?),c#,winforms,forms,resolution,dpi,C#,Winforms,Forms,Resolution,Dpi,我正在用C语言开发一个Windows窗体应用程序,用于办公室。到目前为止,通过锚定和自动调整大小,控件可以在最大化时以默认的表单大小进行布局,等等 在会议室里,在一个大的投影屏幕上,表格看起来不太好。文本太小,不容易阅读 我们在机器上运行Windows7,所以作为一个实验,我将显示渲染从100%提高到150%。这使得控件上的文本变得模糊,所以我做了一些研究,然后将其添加到Main()方法中 这真的很好——应用程序的规模扩大了,控件大且可读性好,一切都很好。唯一的问题是更改显示渲染会迫使您注销,这

我正在用C语言开发一个Windows窗体应用程序,用于办公室。到目前为止,通过锚定和自动调整大小,控件可以在最大化时以默认的表单大小进行布局,等等

在会议室里,在一个大的投影屏幕上,表格看起来不太好。文本太小,不容易阅读

我们在机器上运行Windows7,所以作为一个实验,我将显示渲染从100%提高到150%。这使得控件上的文本变得模糊,所以我做了一些研究,然后将其添加到Main()方法中

这真的很好——应用程序的规模扩大了,控件大且可读性好,一切都很好。唯一的问题是更改显示渲染会迫使您注销,这很不方便,实际上我们的用户永远不会这样做。计算机可能会保持在100%

我可以在应用程序中执行此操作吗?我已经看到了很多关于强制应用程序降低到96 DPI的问题,但是有可能强制应用程序提高到120或144 DPI吗


或者也许有一种不同的更好的方法来实现同样的目标?如果可能的话,我希望避免使用大字体构建单独的“演示模式”界面。

由于要在Windows窗体中正确使用DPI,我们最终采用了一种更简单的方法:更改窗体的字体

如果所有控件都设置为按字体自动缩放(这是它们的默认设置),则可以基于每个表单覆盖系统字体

this.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
有些控件不从窗体的字体中提取,必须单独设置,例如菜单提示

menuStrip1.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
我们将表单的字体大小更改为14,菜单的字体大小更改为15,以增加可读性,并将其更改回原始值以返回标准模式


请注意,正如某些控件默认情况下会忽略表单字体一样,如果您手动配置其字体(如使文本加粗或斜体等),许多(如果不是全部)控件可以也将忽略此项。这方面的每个实例都需要单独处理。

我认为您正在寻找WPF而不是winforms,winforms在默认情况下是独立于解析的。您的所有问题都可以在WPF中解决,方法是将整个应用程序包装在一个
Viewbox
(两行XAML)中。@HighCore不幸的是,这个应用程序应该是我们内部使用的其他应用程序的伴侣,因为这些应用程序是在winforms中完成的,我们必须继续使用winforms。@HighCore我发现,通过运行以下命令,可以获得接近预期效果的效果:
this.SuspendLayout()
this.AutoScaleDimensions=新系统.Drawing.SizeF(72F,72F)
this.Font=new System.Drawing.Font(“Microsoft Sans Serif”,14F,System.Drawing.FontStyle.Regular,System.Drawing.GraphicsUnit.Point,((字节)(0)))
this.PerformAutoScale()无论您是否已拥有现有(旧版)winforms应用程序,都不建议将winforms用于任何新项目。这是一项非常古老的技术,不符合当今的UI标准。它是否是其他应用程序的“伴侣”并不重要,WPF是.Net Windows桌面应用程序的默认和首选UI框架。我知道这是一个不好的借口,但我们许多将继续维护此应用程序的开发人员并不精通WPF。那是什么?不一样吗?我们不喜欢这样!我经常提醒人们,像功能区工具栏这样的东西从2007年开始就很常见了?并不是所有的东西都可以看起来像是脱离了Windows XP。但是我遇到了很多阻力。
menuStrip1.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));