用RichTextBox替换WinForms TextBox

时间:2015-07-09 23:54:45

标签: c# winforms visual-studio-2012

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

有没有办法优雅地执行此操作而不会危及已存在的代码?

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

我希望Visual Studio可以采用更简单的方法来实现这一目标。

1 个答案:

答案 0 :(得分:3)

我不知道一种真正简单的方法。也就是说,手动执行应该不是很复杂:

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

TextBox的{​​{1}}成员不仅仅是TextBoxBase TextBox RichTextBox成员共同继承或覆盖的成员,所以实际使用现在为RichTextBox的字段的所有代码都应该“正常工作”。我无法想到任何可能的例外情况,但如果它们存在,它们应该很少,只需编译代码就很容易找到。

可能像Resharper这样的工具可以让上面的一些更容易。我不确定......我自己不用它。但如果上述内容看起来过于繁琐,您可能会看看他们是否有试用版,看看它是否有助于这种情况。