我的工作涉及在C#.NET中編寫相對較小的WinForms應用程序。有時候我會收到一些項目,這些項目是我已經完成的項目中的輕微變體。通過將領域邏輯抽象爲自己的程序集,我可以利用業務邏輯代碼進行重用,只需在較新的項目中引用它即可。我不得不重寫很多視圖代碼(例如Forms)。我過去曾嘗試過使用Form對象的繼承,但即使它工作了,它也不會對設計師有好處,並且還需要對項目文件進行一些攻擊以便按正確的順序進行編譯。有沒有簡單的方法來利用我的視圖代碼在新項目中重用?利用WinForms應用程序中的預寫視圖代碼
2
A
回答
1
我也遇到了麻煩,無法在我的winforms項目中構建真正可重用的UI代碼塊。
然後,我通過使用UserControls或多或少地達到了這個目標,但是它有時很麻煩,因爲它常常需要很多屬性/方法來進行子類化,因爲它旨在在不同的項目中重複使用,佈局。
這就是爲什麼我使用Helper類來設置一些控件屬性,以這種方式傳遞控件參數。例如:
void SetupEditableGrid(UltraGrid myGrid)
{
myGrid.BackColor...
}
與一些特定的控制相關此外,對於最複雜的對象需要更多的工作,我使用的控制器類。例如,我使用MyEditableUltraGridController來準備原始Infragistic的UltraGrid以完全編輯。
public class MyEditableUltraGridController()
{
UltraGrid _myGrid;
public MyEditableUltraGridController(UltraGrid myGrid)
{
_myGrid = myGrid;
_myGrid.InitializeLayout += ... // some common initialization code
_myGrid.KeyPressed += ... // some keystroke handling code
... etc ...
}
void InitializeLayout(object sender, EventArgs e)
{
... some specific UltraGrid common initialization code
}
... // some code that make my UltraGrid editable, etc...
}
然後,考慮到我的窗體上的現有UltraGrid1控制,我將有:
Form_Load(object sender, EventArgs e)
{
var MyEditableUltraGridController =
new MyEditableUltraGridController(UltraGrid1);
}
我感到舒適與此基於等級的方法,因爲它可以讓我保持控制行爲舒適的方式與良好的靈活性。
+0
這很有幫助,並且是一個很好的例子。謝謝 – JeffE 2011-04-14 16:03:27
1
有沒有一種簡單的方法來利用我的視圖代碼在新項目中重用?
我不知道你的簡單的方法是什麼意思,也不知道您的具體使用情況,但你可以封裝視圖邏輯爲reusable WinForms controls到一個單獨的組件。這些控件可能包含不同的屬性,允許爲每個項目進行個性化設置。
這正是Telerik和DevExpress這樣的公司所做的,只是您可以進一步,甚至包含可以重複使用的一些業務邏輯。
相關問題
- 1. WinForms應用程序中的初始化代碼 - Program.cs或MainForm?
- 2. 視圖代碼中的應用程序邏輯
- 3. 將SQL視圖(動態)加載到WinForms應用程序中
- 4. 在應用程序中運行代碼而不管視圖
- 5. 密碼保護Winforms應用程序
- 6. 如何使用不同的應用程序中的代碼增強一個Django應用程序中的視圖
- 7. C#Winforms應用程序打開第二個Winforms應用程序
- 8. 使用WinForms應用程序中的UrlDecode
- 9. 訪問視圖添加圖形代碼到iOS應用程序代碼
- 10. UWP-從應用程序的代碼中讀取.csproj的應用程序代碼
- 11. 使用套接字(TCP)的Winforms應用程序中的錯誤代碼10060
- 12. 應用程序失敗的代碼簽名驗證(無權利)
- 13. Winforms應用程序必須包含一些寫意圖
- 14. 運行此代碼時Winforms應用程序崩潰
- 15. 在WinForms和ASP應用程序之間共享代碼模塊?
- 16. 轉換網頁表單代碼WinForms應用程序
- 17. 如何寫一個電影的預訂應用程序代碼的NetBeans
- 18. 代碼Android應用程序無圖標
- 19. 用C#編寫的Windows應用商店應用程序中的JavaScript代碼#
- 20. 在WinForms應用程序中嵌入Word文檔預覽
- 21. 在web應用程序中調用winforms
- 22. iPhone應用程序,翻轉視圖時運行其他代碼
- 23. 在iPhone應用程序之間共享視圖和代碼
- 24. 修改控制檯應用程序C鋒利代碼從SharePoint
- 25. Winforms應用程序中的主機Webservice
- 26. winforms中的應用程序控制器
- 27. Winforms和WPF中的應用程序類
- 28. winforms應用程序中的多處理
- 29. WinForms應用程序掛起
- 30. 調試Winforms應用程序
繼承只能讓你到目前爲止。一旦重寫開始變得沉重,並且工具阻礙了,現在是時候砍掉和燃燒。究竟爲什麼你對設計師有問題完全不清楚。 – 2011-04-04 21:00:18
我與設計師的問題是,當我試圖打開它與設計師時,它無法加載父窗體的設計。我想這是有道理的,如果繼承一個表單並不一定意味着繼承設計器代碼。我偏向於使用繼承,因爲它適合我的情況,它根據新的需求取得一個對象(我的Forms)並重寫* some *行爲。 – JeffE 2011-04-04 21:10:52