我的工作涉及在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. C#Winforms应用程序打开第二个Winforms应用程序
- 3. UWP-从应用程序的代码中读取.csproj的应用程序代码
- 4. 使用WinForms应用程序中的UrlDecode
- 5. 应用程序失败的代码签名验证(无权利)
- 6. 使用套接字(TCP)的Winforms应用程序中的错误代码10060
- 7. 如何写一个电影的预订应用程序代码的NetBeans
- 8. 转换网页表单代码WinForms应用程序
- 9. 在iPhone应用程序之间共享视图和代码
- 10. iPhone应用程序,翻转视图时运行其他代码
- 11. 在WinForms应用程序中嵌入Word文档预览
- 12. 修改控制台应用程序C锋利代码从SharePoint
- 13. 在web应用程序中调用winforms
- 14. .NET应用程序中的c#代码
- 15. 更新代码中的应用程序
- 16. Winforms和WPF中的应用程序类
- 17. Winforms应用程序中的主机Webservice
- 18. 调试Winforms应用程序
- 19. WinForms应用程序挂起
- 20. 部署winforms应用程序
- 21. ListBox和WinForms应用程序
- 22. 开源Winforms应用程序?
- 23. 在WinForms应用程序
- 24. Winforms应用程序崩溃
- 25. 我应该编写利用Intellisense的代码吗?
- 26. 在Winforms应用程序中承载Silverlight应用程序
- 27. 试图编写代码来退出C#中的ESC应用程序?
- 28. Rails应用程序视图中的NoMethodError
- 29. 如何编写利用线程的Node.js代码?
- 30. 多视图应用程序
继承只能让你到目前为止。一旦重写开始变得沉重,并且工具阻碍了,现在是时候砍掉和燃烧。究竟为什么你对设计师有问题完全不清楚。 – 2011-04-04 21:00:18
我与设计师的问题是,当我试图打开它与设计师时,它无法加载父窗体的设计。我想这是有道理的,如果继承一个表单并不一定意味着继承设计器代码。我偏向于使用继承,因为它适合我的情况,它根据新的需求取得一个对象(我的Forms)并重写* some *行为。 – JeffE 2011-04-04 21:10:52