报告查看器 – 系统DPI更改时的扩展问题

我有一个Winforms应用程序(在Visual Studio 2010中),其中包含一个报表查看器控件,可以预览和打印A4大小的报表。

一个用户将其Windows字体大小设置为150%(即系统DPI更改),并且当他运行报表时,它在报表查看器预览和打印报表中缩小到2/3大小。

包含报表查看器的表单的AutoScaleMode属性设置为“字体”,但如果我更改它,它似乎不会影响报表。

这不是字体(缺失/缩放)问题,因为我有一个示例程序来演示除了占据整个页面的矩形之外什么都不包含的问题。

我似乎需要一些方法在报告本身中指定它应该以96dpi呈现,无论系统dpi设置如何,但是无法看到我可以指定的任何地方。 我错过了什么?

谢谢,大卫

我遇到了同样的问题。 WinForms ReportViewer已经具备DPIfunction,并将自行扩展。 您只需要告诉系统您的应用程序是DPI识别的,以便系统不会尝试扩展它。

如果尚未添加清单,请在应用程序中添加清单,然后添加以下内容:

  true   

您也可以使用API​​函数SetProcessDPIAware,但建议不要使用: http : //msdn.microsoft.com/en-us/library/ms633543.aspx

作为@JoMan所说的免费答案(因为我无法对他的post发表评论),请记住,您可以相对简单地手动扩展应用中的UI元素。 因此,请让您的应用程序了解DPI(以便您的系统不会扭曲打印结果),正如JOMan建议的那样。 你可以使用这样的东西……

 Using g As System.Drawing.Graphics = WindowsForm.CreateGraphics Dim sngScaleFactor As Single = 1 Dim sngFontFactor As Single = 1 If (graphics.Dpix >= 96) Then sngScaleFactor = (graphics.Dpix / 96) - 0.25 sngFontFactor = (graphics.Dpix / 96) - 0.25 End If If WindowsForm.AutoScaleDimensions = WindowsForm.CurrentAutoScaleDimensions Then WindowsForm.Scale(sngScaleFactor) For Each child As Control In WindowsForm.Controls ScaleFontRecursively(child, sngFontFactor) Next End If End Using 

我相信很多人会争辩(正确!)你通常不想检测DPI并自己手动扩展自己,但dpi自动缩放错误打印微软报告的错误在2018年仍然很突出,所以这提供了一个轻松解决。