【问题标题】:How to avoid unnecessary changes in *.designer.cs and *.resx?如何避免对 *.designer.cs 和 *.resx 进行不必要的更改?
【发布时间】:2014-08-29 12:02:10
【问题描述】:

出于某种原因,Visual Studio winform 设计器会不时地对表单设计器文件和相应的 resx 应用一些枯燥的更改。

迄今为止最烦人的:

  • 控件声明/初始化顺序的更改
  • 更改了某些控件大小(最明显的是菜单项宽度)
  • 对嵌入资源的序列化图像的更改(...等等,什么???)

这些更改不会影响表单/用户控件的功能或外观,但它们会在源代码管理中产生大量噪音,使合并几乎不可能,或者需要容易出错的手动修复以消除所有实际更改注释的更改,直到下次换设计师。

任何想法如何防止工作室发生这种情况?

【问题讨论】:

  • 记录太少,无法准确。我会随机猜测此表单是在具有不同视频适配器分辨率的机器上创建的。将 InitializeComponent() 中的 AutoScaleDimensions 分配与您从头创建的分配进行比较。
  • “锁定控件”菜单会阻止这个吗?右键单击用户控件/表单,然后选择“锁定控件”尝试一下。
  • 只是好奇,但您是否有多个人同时处理一个表单?听起来,由于您的问题更多是源控制噪声而不是改组本身,那么也许一种可能的解决方案是从那个角度处理它。如果您无法在 Visual Studio 中解决它,可能只允许单个用户检查某些项目,然后利用部分和 MetadataTypeAttribute 之类的东西。我在 Infragistics 和从事物继承的表单方面遇到了类似的问题。
  • 哈哈@Larry,看看我的评论
  • @MikeCheel :) 在您的耐心面前,我真诚地鞠躬。我突然想在这个问题中添加 Infragistics 标签。

标签: winforms visual-studio resx


【解决方案1】:

据我了解,您已经编辑了 .designer.cs 文件。从某一点来看没关系,我想我们都这样做。但是,有明确的通知“文件是自动生成的,不要更改它”。因此,Visual Studio 会向您发出警告,如果您对其进行编辑,事情可能不会总是顺利进行。设计就是这样。虽然这些自动更改可能不会给您的应用程序带来麻烦,但它们有时会(例如,为控件设置宽度和高度,这应该根据上下文更改其宽度和高度,如果您有多语言应用程序,这总是必要的)。

因此,如果您不喜欢垃圾,就不要使用设计器,因为它会产生垃圾,这就是它的工作原理。或者你从它开始,在某个时候决定不再打开它,然后进行清洁。

或者你使用 WPF,它满足你的要求,是时候让 WinForms 成为传统了,在某些时候,对它的支持肯定会结束。

【讨论】:

    【解决方案2】:

    请尝试使用右键锁定您的控件,然后在您的表单/用户控件上选择“锁定控件”。

    不幸的是,无法将生成代码中的“有用”更改与来自控件设计器错误或内部工作的“污染”区分开来。

    如果锁定控制功能由于某种原因不起作用,我们无能为力,除了那些可怕的 hack:

    • 创建并完成表单后,将生成的代码(InitializeComponent 方法和声明)移出 .designer.cs。 Visual Studio 不会再碰它了。缺点是您将不再有视觉支持。

    • 将 .designer.cs 文件标记为只读将阻止 Visual Studio 尝试更改它。有时它可能会导致 Visual Studio 控件设计器出现问题,但它会使您的 .designer.cs 保持完整。

    还有另一种方法是根本不使用设计器。这导致了一种拥抱 winforms 编程的新方法,因为您将提供代码来初始化控件及其属性和事件。

    它并不像看起来那么庞大和丑陋:使用可重用的模式和 OO 特性可能非常令人愉快,并且一些对齐良好的方法调用比隐藏在 .designer.cs 文件中的一些可怕的代码更好。

    当然不会有视觉支持,但是您可以通过在设计模式下将控件添加到空容器中来欺骗它,以查看它的外观。

    【讨论】:

    • 非常有价值的建议——不要使用设计师)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 2019-03-13
    • 2019-04-09
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多