2012-05-26 83 views
0

我设计了一个包含某些表单的项目。问题是它不能在宽屏幕上正确显示。我搜索了一下,发现了它通过注册表可以正确处理DPI = 96我想改变DPI在vb.net中(不要手动) 这里是我使用的代码:以编程方式通过注册表更改dpi设置?

Dim dpi As Graphics = Me.CreateGraphics 
    If (dpi.DpiX <> 96 And dpi.DpiY <> 96) Then 
     Dim DPISetting As RegistryKey = My.Computer.Registry.CurrentUser.OpenSubKey("HKEY_CURRENT_USER\Control Panel\Desktop\WindowsMetrics", True) 
     DPISetting.SetValue("AppliedDPI", 96) '** 
    End If 

,但我得到与**一致的nullRefrence异常。你调用的对象是空的。我很长时间以来一直在努力,但找不到问题所在。如果您有任何建议或解决方案,我会非常感激。

+2

看来辱骂你的应用程序更改广占用户DPI系统您的应用程序中的设计问题。 –

回答

2

这种设计从根本上打破了。

Your application should not change a global system setting just to work around a bug in the code.这是保证你的用户将立即卸载应用程序,并不会再使用它的好办法。如果你幸运的话,他们不会告诉他们的朋友。你通常不那么幸运。

而不是试图让你的黑客工作,为什么不只是解决实际问题?如果您的表单在高(或低)DPI设置下显示不正确,则需要使其在这些情况下正常工作。这是开发桌面应用程序的一部分 - 确保您的应用程序在异构环境中工作。

为此,您可能会发现这些问题的答案非常有用的建议:

+0

嗯,我之前觉得改变注册表设置有点奇怪。我也想过使用AutoScaleMode.dpi。现在你已经建议我确定了。感谢您的有益建议。 – butterfly

相关问题