我正在尝试使用C#构建Windows表格应用程序。
如何在.NET中获取DPI?
我以前读过,可以使用DPIX和DPIY来获取当前DPI。
这是正确的吗?
谢谢大家。
使用 Graphics
类的实例。您可以在表单中使用以下方式获取该实例(可以在表单的 Load
事件处理程序中):
float dx, dy;
Graphics g = this.CreateGraphics();
try
{
dx = g.DpiX;
dy = g.DpiY;
}
finally
{
g.Dispose();
}
在.NET Framework 4.7或更新版本(例如.NET 6.0)中,您可以使用Control.DeviceDpi属性来获取当前显示控件的屏幕的DPI值。
int dpi = this.DeviceDpi;
Control.DeviceDpi 属性返回的值取决于应用程序的 DPI 感知模式。在 .NET 5.0 及更高版本中,可以使用 Application.SetHighDpiMode 方法在 WinForms 应用程序的入口点中设置 DPI 感知模式。可能的模式列在 此 MSDN 页面上。
form.DeviceDpi
仍然会报告"96",但是@ThorstenDittmar在答案中提到的方法会正确返回"120"。 - undefined
Width = 3*DpiX; Height = 5*DpiY;
。 - Matheus Rochag.MeasureString(text, font)
返回的是文本的像素宽度。如果您需要以设备无关单位(例如用于打印)进行测量,请在此之前设置g.PageUnit = GraphicsUnit.Millimeter
(或Point
等)。这样,即使屏幕DPI发生变化,测量结果也将保持一致。 - undefined