繁体   English   中英

在Visual Studio中打开表单时修改资源文件

[英]Resource files get modified when the form is opened in Visual Studio

当我打开主窗体设计窗口(VS2010中的C#文件)时,关联的资源文件会自动修改,有时是位置,有时是图像的数据,或者只是重新排列了代码的顺序。 一切仍然可以编译并且可以正常工作,令人讨厌的是,我必须牢记要还原这些更改,否则我将不断对我的存储库犯下乱码。 有人知道为什么会发生这种情况吗,也许是因为某些原因?

编辑:

例如,此数据:

 <data name="connectToolStripMenuItem.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
    <value>
        somevalue
    </value>

自动更改为:

 <data name="connectToolStripMenuItem.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
    <value>
        someothervalue
    </value>

并放在另一个位置。 一切仍然可以正常工作,问题在于这些更改会显示在我的源代码管理中,因此我必须记住在执行提交之前还原resx文件,除非我实际上对该文件进行了一些修改,然后我才必须提交所有内容。

除非我实际上对文件进行了一些修改,否则我必须提交所有内容

这是很清楚,当你被迫提交.resx文件以某种方式无法打开的图像转换成“乱码”你做什么 投诉并不十分可信,我认为真正的问题是.resx文件已更改,而您不知道为什么。

.resx文件更改的原因越来越普遍,没有任何明显的原因,只需在设计器中打开表单就足够了。 尤其是最近随着Windows 10变得越来越普遍。 根本原因是视频适配器的DPI(每英寸点数)设置。 几十年来,此设置一直停留在100%(即96 dpi),但便宜的超高分辨率LCD面板正变得越来越普遍,迫使用户将缩放比例增加到125或150%,以使文本清晰可见。 并为Win10安装程序选择更高的价值。

这对UI设计有相当大的影响,Form.AutoScaleMode属性在设计时也可以完成它的工作。 Visual Studio支持dpi,因此设计人员可以看到DPI更改。 只要该应用也被声明为dpiAware,就保留所见即所得。 顺便说一句,VS2015 Update 1终于让它变得更容易了,“应用程序清单文件”项模板现在包括了它。 只需删除评论即可。

也确实会更改.resx文件的内容。 特别是对于MenuStrip,其TrayLocation被序列化到文件中。 菜单项的OnImageScalingSizeChanged()方法在设计时运行。 同样,对于任何控件,如果窗体的Localizable属性设置为True,则会将其Location和Size属性序列化为.resx文件。

识别这是最根本原因的最简单方法是查看表单的Designer.cs文件:

  this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);

将此与全新Winforms项目中的相同属性分配进行比较。 一个不同的值将获得自动重新缩放以执行其工作并更改.resx文件。

通常,不匹配的原因是在另一台计算机上创建的设计。 也许是一个比较老的。 或由另一个在不同DPI设置下运行其显示适配器的团队成员修改。 如果团队成员没有相同的硬件,通常就不需要所有人同意。 如果给每个人相同的好监视器,则可以用很少的钱来改善士气:)也许您不应该为此奋斗,只需检查一下,这样下次就无需提醒了。

只需将这些文件添加到您的.gitignore文件即可。 (如果您使用的是git)

这是我的样子:

**。suo **。bin **。obj ** bin ** obj

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM