【问题标题】:The SystemInformation.FrameBorderSize return wrong sizeSystemInformation.FrameBorderSize 返回错误的大小
【发布时间】:2012-10-12 10:04:44
【问题描述】:

我在我的一个项目中发现了一个奇怪的问题。问题的确切原因是 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) 得到相同的(不正确的)结果。

更新:
当项目的 Target Framework 设置为“.Net Framework 3.5 Client Profile”并进行调试时,我们得到不正确的结果(4,4)。 当目标框架是“.Net Framework 4.5”时,无论是否调试,我们总是得到不正确的结果(4,4)。

有人能告诉我为什么会发生这种情况(此代码在同一台机器上的 VS2010/VS2008/VS2005 下正常工作)吗? VS2012 调试器或 .Net Framework 版本对系统指标有何影响?

【问题讨论】:

  • 在这两种情况下我都会得到(4, 4)
  • @LarsTech:正确的值是 (8,8)。当项目的 Target Framework 设置为“.Net Framework 3.5 Client Profile”时,我们得到不正确的结果。当目标框架为“.Net Framework 4.5”时,我们总是得到 (4,4)。
  • “正确”值是您的主题设置的值。我使用的系统是 5,5,和 Lars 一样,我在调试器下没有得到不同的值。

标签: .net winforms debugging visual-studio-2012


【解决方案1】:

我在 msconnect 上找到了相关的错误报告:Regression: ::GetSystemMetrics delivers different values

这是由于链接器的最低版本在 VS 2010 中有所不同 与 VS 2012 相比。AppCompat 垫片基于支持的最低操作系统 由链接器定义,而不是 app 中使用的 _WIN_32_WINNT 值 编译时间。

其他相关问题:

  1. WinForm dialogs displayed differently by *.vshost.exe and *.exe using VS 2012 when FormBorderStyle set in form codebehind
  2. The SystemInformation.FrameBorderSize property returns a wrong value if a debugger is attached

很遗憾,所有这些问题都无法解决

【讨论】:

    【解决方案2】:

    如果您在受影响的平台上构建,请检查 Debugger.IsAttached,如果返回 true,则将 SystemInformation.FrameBorderSize 的值加倍>.

    像这样:

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

    我知道这是一个黑客。但它有效。如果您使用的平台显示此将无法解决问题。

    【讨论】:

    • 谢谢,但恐怕这不是一个解决方案,因为结果不依赖于调试器是否连接。您可以在我的问题/答案中查看详细信息。
    猜你喜欢
    • 2017-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多