2015-07-09 39 views
1

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

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

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

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

+0

只有与设计相关的代码才会被删除。没有其他的。不是事件,甚至代码的一部分都使用文本框。您只需将新的richtextbox名称与文本框名称相同即可 –

+1

您不会丢失代码,但会丢失事件接线。 VB.Net使这更容易,但在C#中,我只需进入设计器文件并替换TextBox中的两个声明即可。 – LarsTech

+0

您可以将TextBox名称重构为新的名称(选择一个字符串,该字符串不能在项目中的其他位置找到,例如“txtQuestionOldVersion”)。创建名称为“txtQuestion”的RichTextBox。然后在窗体上执行全部替换操作。cs文件(不是所有项目文件)将“txtQuestionOldVersion”更改为“txtQuestion”。您可以安全地删除“txtQuestion”控件。 – Graffito

回答

2

我不知道一个真正简单的方法来做到这一点。这就是说,做手工应该不是很复杂:

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

很少有如果不只是从继承或TextBoxBase构件覆盖的TextBox任何成员,基类TextBoxRichTextBox之间共享,所以所有的代码的实际使用现在是一个字段RichTextBox应该“只是工作”。我想不出任何可能的例外,但如果它们存在,它们应该很少,并且通过编译代码很容易找到。

这是可能像Resharper这样的工具可以使上述的一些更容易。我不确定......我自己不使用它。但是,如果上述看起来过于繁琐,则可能会查看是否有试用版本,并查看它是否有助于解决此问题。