1

私のプロジェクトの1つで奇妙な問題が見つかりました。この問題の正確な理由は、SystemInformation.FrameBorderSizeが、アプリケーションがデバッガーで実行されているか VS2012 で実行されていないかによって異なる値を返すという事実です。私は次のテストを使用しています:

public partial class Form1 : Form {
    public Form1() {
        InitializeComponent();
    }
    protected override void OnLoad(EventArgs e) {
        base.OnLoad(e);
        this.label1.Text = SystemInformation.FrameBorderSize.ToString();
    }
}

デバッガーでは間違ったサイズ(4,4)を返しますが、デバッガーではなく正しい値を返します(8,8)。関連する WinAPI 呼び出し ( GetSystemMetrics ) は、同じ (間違った) 結果を取得します。

更新:
プロジェクトのターゲット フレームワークが「.Net Framework 3.5 クライアント プロファイル」に設定され、デバッグされている場合、正しくない結果 (4,4) が得られます。また、ターゲット フレームワークが「.Net Framework 4.5」の場合、デバッグ中かどうかにかかわらず、常に誤った結果 (4,4) が返されます。

なぜこれが起こるのか(このコードは同じマシンのVS2010/VS2008/VS2005で正しく動作します)、誰かが私に情報を提供してくれますか?VS2012 デバッガーまたは .Net Framework のバージョンは、システム メトリックにどのように影響しますか?

4

2 に答える 2

0

影響を受けるプラットフォームでビルドしている場合は、Debugger.IsAttachedを確認し、それがtrueを返す場合は、 SystemInformation.FrameBorderSizeの値を 2 倍にします。

そのようです:

public static Size RealFrameBorder {
  get {
    return new Size(
      SystemInformation.FrameBorderSize.Width * (Debugger.IsAttached ? 2 : 1),
      SystemInformation.FrameBorderSize.Height * (Debugger.IsAttached ? 2 : 1)
    );
  }
}

私はそれがハックであることを知っています。しかし、それは機能します。これを表示するプラットフォームを使用している場合、問題は解決されません

于 2015-11-30T23:10:04.730 に答える