0

Windows 7 x64 で Visual Studio 2012 を使用していますが、既存のコードの一部が期待どおりに機能しなくなりました。問題を再現する手順は次のとおりです。

  • C# Winforms プロジェクトを作成する (フレームワーク 2.0 を使用)
  • サイズ「Form1」を 300x300 にする
  • 境界線のスタイルを「FixedSingle」に設定します
  • 最小/最大ボタンを無効にする
  • 「this.Bounds.ToString()」を表示する Form_Load にメッセージ ボックスを表示します。

これをデバッガで実行すると、正しいサイズ (300x300) が表示されます。VS2012 の外部で EXE を実行すると、間違ったサイズ (290x290) が表示されます。このコードは Visual Studio 2010 で正常に動作します。同じフレームワーク ライブラリを引き続き使用している場合、IDE はどのように違いを生むことができますか? 他の誰かが上記の手順を使用してこの問題を再現できますか、またはこれが発生する理由や修正方法について何か考えがありますか?

4

1 に答える 1

0

参照ソースによると、フォームに設定されているわずかに異なるウィンドウ スタイルが原因である可能性が最も高く 、この関数はクライアント座標を変換するために呼び出されます。

internal Size SizeFromClientSize(int width, int height) {
    NativeMethods.RECT rect = new NativeMethods.RECT(0, 0, width, height);
    CreateParams cp = CreateParams;
    SafeNativeMethods.AdjustWindowRectEx(ref rect, cp.Style, HasMenu, cp.ExStyle);
    return rect.Size;
}
于 2015-08-05T12:54:10.723 に答える