0

我在 Windows 7 x64 中使用 Visual Studio 2012,我的一些现有代码不再按预期运行。以下是重现该问题的步骤:

  • 创建一个 C# Winforms 项目(使用 framework 2.0)
  • 尺寸“Form1”为 300x300
  • 将边框样式设置为“FixedSingle”
  • 禁用最小/最大按钮
  • 在 Form_Load 中显示一个显示“this.Bounds.ToString()”的消息框

如果您在调试器中运行它,它将显示正确的大小 (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 回答