2012-05-26 119 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

相關問題