0

我正在研究一個包含一些窗體和控件的winforms項目。每一個都翻譯成4種語言。有一種名爲「PropertiesForm」的表單,這是一個噩夢來維護:它有一個帶6個標籤頁的標籤容器,並且有超過100個控件,髒代碼嘗試(並且經常失敗)來保持整個事物的連貫性。如何返回到乾淨的用戶界面代碼?

因爲我負責這個項目,所以我儘量避免對這個表單做很大的修改,但它不再可行。做出重大改變將會困難而且緩慢,並可能導致穩定性問題。那麼,恢復乾淨易懂的代碼的最佳方法是什麼?

我的想法是爲每個標籤頁至少設置一個控件,並在窗體中同步它們。我的問題是,我不知道用visual studio做到這一點的簡單方法。有沒有自動的方法來保持翻譯和事件處理程序在新控件中,因爲複製粘貼使它們消失?是否有任何工具或加載項爲此任務設計?

在不破壞一切的情況下清潔結構應該怎麼辦?

回答

1

據我所知,沒有這樣的工具,我不知道它應該存在什麼原則。

我只是簡單地創建6個用戶控件,從相應控件中的每個標籤頁中剪切控件並將其粘貼到新創建的控件中。之後,通過在各自的UserContols中調度錯誤並修正錯誤來修復所有錯誤。但是,如果選項卡控件與不同選項卡中的其他控件鏈接在一起,則可能會遇到一些「問題」。

另一種方法是從邏輯上分離用戶控件(日期/時間控件,文本控件,業務對象相關控件)。

但是,恐怕事件處理程序和其他你需要自己修復的東西。

1

你已經知道什麼是錯的,以及如何解決它:在小的,鬆散耦合的組件中打破一切,並使表單在一起工作。請參閱Model-View-Controller模式。也許最好爲每個組件製作一個單獨的控制器,然後大型控制器擁有自己的控制器來控制較小的控制器。這對體面的事件處理很重要:不要連接控制事件,而是控制器事件。

0

這樣的修改可能應該在代碼中完成,而不是在設計編輯器中完成。你自己說複製粘貼開始破壞事物:設計編輯器是爲了創建設計/佈局,但不適合處理背後的代碼。

我建議你先將6個標籤頁拆分爲6個不同的文件,然後將1個文件分配給實際的表單。然後快速查看代碼並查看是否可以找到常見模式,無論是功能還是邏輯(即似乎重新出現的某些控件組或某些代碼結構被大量使用)。提取它們,放入單獨的類並應用於原始文件。一個典型的例子就是控制帽具有一定的風格並且被多次使用:應該得到一個管理風格的專用類/功能。

同時,記錄您的步驟並保持測試功能。

也是非常重要的(你不要在你的問題中談論它,但它可能存在)是你從底層數據結構/數據庫/文件獲取數據的方式。也許你應該從這個開始:爲你的應用程序提供一個專用的,標準化的方式來處理數據和UI之間的通信,並使所有控件都使用它。如果您選擇重構UI或數據庫,或者兩者兼而有之,如果您不必更改該通信邏輯,就會知道您做得正確。