3

タイトルで示唆されているように、Windows XP を使用するマシンの Visual Express 2010 でアプリケーション (Windows フォーム) を作成しました。私は Windows 7 を実行しているマシンでアプリケーションをテストしましたが、ボタンとコントロールのフォーマットの変更により、アプリケーションの全体的な外観が台無しになりました。

アプリケーションが Windows 7 コンピューターで実行されないようにする方法はありますか?

他の代替手段は、ユーザーが使用しているOSを確認し、これに応じて、ボタン/コントロール/などの配置/位置を変更することです...

最善のアプローチは何ですか?

ご回答ありがとうございます。

4

3 に答える 3

4

System.Environment.OSVersionを使用できますが、最善の方法は、Windows 7 でもアプリケーションを実行して正しく表示することです。Windows 7 を使用しているクライアントを失いたくはありません (特に、Windows 7 が最も使用されている現在)。 Windows版)

于 2013-06-11T11:57:57.493 に答える
4

ほとんどの場合、問題の原因を誤って特定しました。フォーム レイアウトの破損の最も一般的な原因は、ビデオ アダプタの DPI 設定です。これは 1 インチあたりのピクセル数を決定し、 Windows 7 では非常に簡単に変更できます。XP でも変更できますが、変更するのが難しいだけです。設定は重要です。モニターは、特に Apple の「Retina」ディスプレイの推進により改善されています。

Program.cs の Main() メソッドを調整して、チェック コードを追加します。次のようにします。

    [STAThread]
    static void Main() {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        var main = new Form1();
        using (var gr = main.CreateGraphics()) {
            if (gr.DpiX != 96) {
                MessageBox.Show("Sorry, didn't get this done yet.  Bye");
                Environment.Exit(1);
            }
        }
        Application.Run(main);
    }

もちろん、フォームのレイアウトを修正することは、長期的な解決策です。典型的な間違いは、フォームの Font プロパティまたはコンテナーの Font プロパティと一致しない独自の Font プロパティをコントロールに与えることです。XP マシンで同じ問題を引き起こす簡単な方法は、DPI 設定が何をするかをエミュレートすることです。XP で設定を見つけたり、変更したときにマシンを再起動したりする手間が省けます。このコードをフォームに貼り付けます。

    protected override void OnLoad(EventArgs e) {
        this.Font = new Font(this.Font.FontFamily, this.Font.SizeInPoints * 120f / 96f);
        base.OnLoad(e);
    }

これは、Win7 の表示設定で 125% のスケーリングを選択することと同じです。

于 2013-06-11T12:14:49.867 に答える
4

アプリが実行されているオペレーティング システムのバージョンを確認するだけです。プログラムが Windows 7 で実行されている場合は、プログラムを終了します。たとえば、次のようにします。

if (Environment.OSVersion.ToString().Contains("Microsoft Windows NT 6.1"))
{
    //code to execute if running win 7
}
于 2013-06-11T12:00:13.567 に答える