2015-07-09 44 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這樣的工具可以使上述的一些更容易。我不確定......我自己不使用它。但是,如果上述看起來過於繁瑣,則可能會查看是否有試用版本,並查看它是否有助於解決此問題。