用 RichTextBox 替换 WinForms TextBox

Su *_*lyn 5 c# winforms visual-studio-2012

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

有没有办法优雅地做到这一点而不会危及已经存在的代码?

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

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

Pet*_*iho 4

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

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

几乎没有任何成员TextBox不仅仅是从和TextBoxBase之间共享的基类继承或覆盖的成员,因此所有实际使用该字段的代码现在应该“正常工作”。我无法立即想到任何可能的异常,但如果存在的话,它们应该很少,并且只需编译代码就可以轻松找到。TextBoxRichTextBoxRichTextBox

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