【问题标题】:Replacing a WinForms TextBox with a RichTextBox用 RichTextBox 替换 WinForms 文本框
【发布时间】:2015-07-10 08:37:26
【问题描述】:

我有一个包含 TextBox 的 Windows 窗体应用程序。我想用新的 RichTextBox 对特定的 TextBox 进行一揽子替换。如果我从设计器中删除有问题的文本框,Visual Studio 2012 不会自动删除任何引用该文本框的代码吗?

有没有一种方法可以优雅地执行此操作而不会危及已经存在的代码?

我假设一种方法是在 cs 文件中进行字符串替换,甚至包括 Designer.cs 文件,并找到包含控件名称 (txtQuestion) 的任何字符串并将其替换为新的名称RichTextBox 控件。

我希望 Visual Studio 有更简单的方法来做到这一点。

【问题讨论】:

  • 只删除与设计相关的代码。没有其他的。不是事件,甚至部分代码都使用文本框。你只需要使新的richtextbox名称与文本框名称相同
  • 您不会丢失代码,但会丢失事件连接。 VB.Net 使这更容易,但在 c# 中,我只需进入 Designer 文件并替换 TextBox 的两个声明。
  • 您可以将 TextBox 名称重构为新名称(选择项目中其他地方找不到的字符串,例如“txtQuestionOldVersion”)。创建名称为“txtQuestion”的 RichTextBox。然后对form.cs文件(不是所有项目文件)进行replace all,将“txtQuestionOldVersion”改为“txtQuestion”。您可以安全地删除“txtQuestion”控件。

标签: c# winforms visual-studio-2012


【解决方案1】:

我不知道有一种真正简单的方法可以做到这一点。也就是说,手动操作应该不是很复杂:

  • 在 *.Designer.cs 文件中,应该只有两个地方可以更改类型:字段声明和创建新实例的位置。只需将类型名称从 TextBox 更改为 RichTextBox 即可。
  • 实际上不需要更改控件的名称(即其字段的名称),但如果你真的想,你可以在控件的属性窗口中更改Name属性,VS会自动重构引用该字段的代码。任何明确引用该控件字段的代码都将自动更新。
  • 如果你真的不走运,你会在代码中的某些地方将对控件的对象引用转换为其实际类型,例如在事件处理程序中,您使用sender 参数而不是仅仅引用字段(例如,当同一个事件处理程序与多个控件一起使用时会发生这种情况)。这些地方,您将不得不自己追踪并将分配给正确类型的演员表和变量更改为正确的类型。请注意,IDE 无论如何都不会有可靠地完成这项工作的实用方法。

TextBox 的成员很少(如果有的话)不只是继承自或覆盖 TextBoxBaseTextBoxRichTextBox 之间共享的基类)的成员,因此所有代码实际上都使用现在是 RichTextBox 的字段应该“正常工作”。我想不出任何可能的异常,但是如果它们存在,它们应该很少,并且只需编译代码就可以很容易地找到。

可能像 Resharper 这样的工具可以使上述一些工作变得更容易。我不确定……我自己不使用它。但是,如果上面看起来太繁琐,您可能会看看他们是否有试用版,看看它是否在这种情况下有所帮助。

【讨论】:

    猜你喜欢
    • 2010-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多