0

いくつかのフォームを含むプロジェクトを設計しました。問題は、ワイドモニターで正しく表示されないことです。私はそれを検索し、dpi = 96で正しく動作することを発見しました。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例外が発生します。オブジェクト参照がオブジェクト インスタンスに設定されていません。私は本当に長い間それに取り組んできましたが、問題が何であるかを見つけることができませんでした。何か提案や解決策があれば、とてもありがたいです。

4

1 に答える 1

2

この設計は根本的に壊れています。

コードのバグを回避するためだけに、アプリケーションでグローバル システム設定を変更しないでください。これは、ユーザーがすぐにアプリケーションをアンインストールし、二度と使用しないことを保証する良い方法です。運が良ければ、彼らは友達に教えません。あなたは通常、それほど幸運ではありません。

ハッキングを機能させようとする代わりに、実際の問題を修正してみませんか? 高 (または低) DPI 設定でフォームが正しく表示されない場合は、それらのシナリオでフォームを機能させる必要があります。これは、デスクトップ アプリの開発の一部であり、アプリが異種環境で確実に動作するようにします。

そのために、これらの回答のアドバイスが役立つ場合があります。

于 2012-05-26T08:48:38.440 に答える