【问题标题】:Automatic regenerate designer files自动重新生成设计器文件
【发布时间】:2011-09-05 12:54:07
【问题描述】:

最近我一直在对我们使用的许多控件进行一些改进,例如赋予属性默认值和将按钮设为私有而不是受保护。 通过进行这种调整,您需要重新生成具有此控件或继承自该控件的控件的表单的设计器文件。

在过去,这并不是一个真正的问题,因为我们只有 20-30 个表格。目前我们已经有 300 多个表单,这意味着在 VS2010 中打开相同数量的设计师。

所以我的问题是:你知道一种方法可以使这个过程自动化,从而重新生成所有表单吗?

我一直在考虑一个查找设计器文件并打开文件的宏(最多打开 25-50 个文件以确保 VS 不会崩溃),但我无法得到这个工作。

希望有人给点建议!

【问题讨论】:

  • 旧的“查找和替换”(ctrl-F)怎么样?
  • 没错,我们过去经常这样做。但 2 年后,所有设计器文件都变得不可读(很多超过 20 行的空白,属性不按字母顺序排列)。当 VS 重新生成设计器文件时,一切都井井有条。当您拥有如此多的表单并每天进行调整时,这有点必要(我们正在对整个 UI 进行重大升级)。

标签: c# visual-studio user-interface windows-forms-designer automated-refactoring


【解决方案1】:

使用表单的继承而不是维护超过 300 个控件的更改。

【讨论】:

    【解决方案2】:

    我也遇到了这个问题(另见:Force WinForms to regenerate .designer.cs files)。

    最后,我删除的大多数属性都是唯一命名的,并且我能够编写一个 shell 脚本来从包含属性名称的设计器文件中删除行。

    注意,这实际上删除了该行,而不仅仅是留下一个空行。
    它需要从 Bash Shell 运行,如果您安装了 msysgit,那么该 shell 就可以了。
    在这一项中,TextForeColor 是被移除的属性。

    #!/bin/bash
    files=$(find . -type f -name '*.Designer.cs' -print0 | xargs -0 grep -l 'TextForeColor')
    for file in $files
    do
        echo $file
        sed '/TextForeColor/ d' $file >$file.tmp
        mv $file.tmp $file
    done
    

    【讨论】:

    • 您知道您可以使用 Visual Studio 中的“查找和替换”对话框完成相同的操作。
    • @AMissico:据我所知,你不能:VS 中的 F&R 不支持删除行,只删除行内容(我特别不想留下空行),我必须运行它超过 60 多个项目的源目录(没有适用于所有项目的单一解决方案)。
    • 我去掉了多个空行、双空行、单空行、匹配类似于":i\.TextForColor = "的正则表达式,所以我没有意外更改其他内容。您可以在不同的文件夹(包括它们的子文件夹)上执行此操作,而不仅仅是在“整个解决方案”或项目中,甚至可以指定文件类型。该功能被称为“在文件中替换”是有原因的。
    • “在文件中替换”功能强大,可以节省大量时间。查看如何在 geekswithblogs.net/mnf/archive/2008/03/04/…> 处删除空行
    【解决方案3】:

    我发现做你想做的唯一方法是打开表单设计器,添加一个控件,然后保存。这将重新生成设计器代码。接下来删除新添加的控件,再次保存,关闭。

    我通常通过双击工具箱中的按钮来添加按钮。这会将按钮置于位置 0,0。

    几个月前,我做了一个包含大约 100 个表单和用户控件的项目。我没有在项目文件上递归的宏,而是记录了一个临时宏,然后为每个表单/用户控件运行宏并检查结果。

    不要将重构与重新格式化相混淆。我经常以大型形式优化和/或修改设计器代码。例如,我将更改控件添加到面板的顺序,以及如何将面板添加到其他面板。 我不会盲目地重新生成设计器代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-07
      • 2010-11-17
      • 2015-08-06
      • 2013-03-08
      • 2012-06-18
      • 1970-01-01
      相关资源
      最近更新 更多