gpt4 book ai didi

c# - 为什么 Visual Studio 会自动更改窗体的布局?

转载 作者:太空狗 更新时间:2023-10-29 21:04:12 24 4
gpt4 key购买 nike

我有一个包含 3 个文件的 Windows 窗体:

  • AbcFrm.cs

  • AbcFrm.Designer.cs

  • AbcFrm.resx

每当我对 datagridview 的任何属性做一点更改或添加新事件时,控件的大小向右侧和底部变大并导致控件的某些部分超出范围。

我比较了 .Designer.cs 文件之前和之后执行较小的属性更改(例如,将 datagridview 的 tabStop 属性值从 true 更改为 false)并发现一些行/属性在 .Designer 中自动添加/更改。 .cs 文件:

  • 部分控件的.Size值发生变化
  • 部分控件的.Location值发生变化
  • 部分控件的.Padding值变化
  • 表单的.AutoScaleDimensions变大了
  • 表单的.ClientSize变大了

编辑

我意识到,当我将分辨率从 150% 更改为 125% 并重新打开应用程序时,由于 Windows 窗体现在具有更大的缩放比例,控件回到了正确的位置。我的问题类似to this question

原因是代码可能是在不同分辨率的计算机上编辑的。然而,解决方案并不令人满意,因为它没有解决问题,只是找出原因。

如何防止这种情况发生?我使用的是 Visual Studio 2010,我的操作系统是 Windows 10。

最佳答案

推理

这是由于 AutoScaleMode 属性,它根据不同开发机器之间每英寸点数 (DPI) 的差异来缩放 winform 中对象的大小和位置。这是一个功能 cannot and should not be changed .有关官方文档,请参阅 Automatic Scaling in Windows Forms在 MSDN 上。

假设有两台机器,机器 A 和 B。机器 A 的 DPI 为 96,比例因子为 100%。机器 B 的推荐设置为 144 DPI 和 150% 比例因子。在机器 A 中创建了一个 WinForm,而机器 B 正在尝试编辑该 WinForm。

当机器 B 中的 Visual Studio 遇到机器 B 的 DPI 与用于创建 WinForm 的 DPI 不同时,它会自动缩放 WinForm 中的对象以尝试使 WinForm 在机器 B 中显示为它在机器中的样子一个 。因此,这会导致 WinForm.Designer.cs 文件中的某些属性自动更改

解决方法

为了在没有任何自动对齐的情况下继续在高 DPI 机器上编辑 WinForms,我们需要在高 DPI 机器上设置 DPI 以匹配用于创建 WinForm 的机器的 DPI。这可以通过将比例因子调整为 100%(96 DPI;右键单击桌面 > 显示设置)并重新启动 Visual Studio(或重新登录 Windows,如果不起作用)来完成。

注意:此处的关键是将 DPI 调整为用于创建 WinForm 的机器的原始 DPI。仅调整比例因子可能行不通。您可能需要调整屏幕分辨率。

关于c# - 为什么 Visual Studio 会自动更改窗体的布局?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37109772/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com