winform,我的工具集之UI层Base&WinForm

      OK,继续前面的章节,Db层和业务层都说完以后,就要聊聊UI层了.这部分内容是大家差异化最大的地方了.有人用的是微软的标准控件,有人用的是第三方的控件库,有个自己搞了套.
      其实没啥的,只要好用就没事的.这个东西,只要自己觉得好用就行了呗.也别太看重其他人的.自己写的才是量身订做的,够用好用即可.去年一个同事的婚礼上,和以前的同事聊天,他也在搞一套框架,我问他搞得怎么样?他说,现在在往外面扔东西,只保留最核心的东西.听后不绝赞叹,看来他们已经高出一个层次了.
      在我们还在不断加功能的情况下,他们已经开始返璞归真了,最简单的就是最好用的.额,继续我们这个东东吧.经过前面业务层Base层的介绍,UI层Base项目文件的作用其实也是一样的,只是现在它的作用还很渺小,只是定义了一些控件枚举之类的.如图-1和图-2所示,其他还真没什么可说的.自己看代码吧
clip_image001winform,我的工具集之UI层Base&WinForm
图-1
clip_image002clip_image001winform,我的工具集之UI层Base&WinForm
图-2
      UI层的WinForm项目文件,很明显,是为WinForm软件准备的.里面封装了一套自己的控件,当然你不用也可以.封装比较简单,只是增加了一些属性,扩展方法基本没有.如图-3和图-4所示
clip_image003clip_image002clip_image001winform,我的工具集之UI层Base&WinForm
图-3
clip_image004clip_image003clip_image002clip_image001winform,我的工具集之UI层Base&WinForm
图-4
窗体名称和描述,如果还有其他典型的窗体,可自行添加. 窗体名称
描述
frmSheet
窗体祖先,建议新建窗体均继承于此
frmSheetBill
单据窗体祖先,一般用于编辑数据
frmSheetList
列表窗体祖先,一般用于批量展示数据
frmSheetListGrid
列表窗体祖先,只有一个网格控件
frmSheetListGridTree
列表窗体祖先,包含网格控件+树控件

      封装过程中,对控件的操作方法,单独封装在一个类文件中,如图-5所示.都是一些常用的方法,大家直接看下就OK了.
clip_image005clip_image004clip_image003clip_image002clip_image001winform,我的工具集之UI层Base&WinForm
图-5
      有个接口,要特别说明下.就是IWinPanelHelper接口,这个接口的作用之前贴子里发过的WebPanel控件类似,用到了之前提的数据域概念.我们看下如图-6所示的页面.这个页面从只有一个窗体到数据如何加载和操作的?
clip_image007clip_image005clip_image004clip_image003clip_image002clip_image001winform,我的工具集之UI层Base&WinForm
图-6
      如图-7所示,在页面的初始Load事件中,获取关于这个页面的菜单栏,工具栏,按钮和右键菜单.注意:无论是否存在,均返回DataTable对象.看最后的table_panelitem对象,它存储的是这个页面中所涉及到的非标签类型的控件.源数据如图-8所示.
clip_image009clip_image007clip_image005clip_image004clip_image003clip_image002clip_image001winform,我的工具集之UI层Base&WinForm
图-7
      这些数据可以存储下拉菜单的数据源,初始值,是否必输,控件状态等.然后调用CreateWinPanel方法,将这些数据注册起来(动态增加这些控件也可以),注册到这个页面中,以备后用.经过一系列的准备工作,我们看看如果是修改操作,数据是如何加载到UI控件上的?如图-9所示.
clip_image011clip_image009clip_image007clip_image005clip_image004clip_image003clip_image002clip_image001winform,我的工具集之UI层Base&WinForm
图-8
clip_image012clip_image011clip_image009clip_image007clip_image005clip_image004clip_image003clip_image002clip_image001winform,我的工具集之UI层Base&WinForm
图-9
取数据代码:item_model.GetTableDataAreaByName(“billmaster”,this.BID);
UI控件赋值:this.SetWinPanelControlValue(“billmaster”,table_billmaster.Rows[0]);
设置控件状态:this.SetWinPanelControlStatus(“billmaster”,this.EditMode)
      这三个方法都有一个共同的参数,就是billmaster.各位看代码的时候,就会知道.它相当于标记符.以UI控件赋值方法为例,这个方法的作用是要把table_billmaster的数据赋到数据域为billmaster的所属控件中.取值也是如此,如图-10所示.整个过程中,我们看不到一句SQL语句(都是XML配置),看不到UI控件this.textbox.text方式取值(可以这样逐个控件取值).只通过几个方法就可以搞定,是不是很简单啊?!
clip_image013clip_image012clip_image011clip_image009clip_image007clip_image005clip_image004clip_image003clip_image002clip_image001winform,我的工具集之UI层Base&WinForm
图-10
      所有的代码,大家可以参考Navi.Plat.Model.Author项目文件中的frmAuthorList和frmAuthorBill这两个文件.
这里还有一个项目在其中,名称是Navi.Plat.AssiTools.WinForm,它是什么作用呢?就是辅助WinForm开发的一套东西,如图-11所示
clip_image014clip_image013clip_image012clip_image011clip_image009clip_image007clip_image005clip_image004clip_image003clip_image002clip_image001winform,我的工具集之UI层Base&WinForm
图-11
frmHelpSimple页面,是公用帮助
frmMessage页面,是弹出提示信息,进度条等用于耗时较长的操作.
frmMSNPopup页面,作用是在右下角弹出仿MSN弹出页面的页面.用于提示信息;
      压缩包项目说明,如图-12所示
clip_image015clip_image014clip_image013clip_image012clip_image011clip_image009clip_image007clip_image005clip_image004clip_image003clip_image002clip_image001winform,我的工具集之UI层Base&WinForm
图-12
Navi.Kernel.UILayer.Base,UI层通用类库,被WebForm和WinForm同时调用
Navi.Kernel.UI.WinForm,WinFormUI类库项目文件
Navi.Plat.AssiTools.WinForm,WinFormUI类库辅助项目文件,存放如图-11所示对象
Navi.Plat.Model.Author,开发平台功能系统,一个真正的业务模块
Navi.Plat.Example.WinForm,示例程序,可直接运行,加上另一个压缩包中提供的NaviPlat0Db_bak110520.bak的数据库文件,SQLServer2005,直接还原即可.
      截止至这篇贴子,WinForm部分已经全部上传完毕,将
我的工具集之Db层
我的工具集之业务层和这篇贴子提供的下载文件,全部整合起来,是一个完整的示例.
Tags:  winform

延伸阅读

最新评论

发表评论