




免费预览已结束,剩余40页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本科毕业论文(科研训练、毕业设计)题 目:基于模型台的窗体自动排版姓 名:学 院:软件学院系:专 业:软件工程年 级: 学 号:指导教师(校内): 职称: 指导教师(校外): 职称: 年 月厦门大学本科毕业论文摘 要ERP产品的开发和应用中需要根据不同的需求创建多种不同的千差百异的窗体,实现根据排版模型动态生成窗体可省去手动进行窗体排版设计的麻烦,规范窗体上所有控件的布局,并且存储时只需存储模型,比静态窗体的存储更节省空间,同时也更有利于二次开发以及维护;在应用方面,用户有定制个人自定义窗体的需求,静态窗体的自定义需要较高端的用户,而且需要进行编程方面的培训方可完成,而窗体排版功能只需要用户定义在窗体上所要出现的控件、数据,甚至只需要列出字段,就可以生成更为美观整齐的窗体。本文主要介绍在ERP产品中基于模型工作台的窗体自动排版功能的具体需求、总体设计、各种功能与细项的设计、实做和总体的类结构,着重介绍窗体模型的搭建以及动态窗体的生成,并展示系统运行的操作过程和生成的窗体。窗体模型从模型工作台的模型基类继承,并为每个需要序列化的对象编写序列化的接口实做,编写时的主要难点在于结构的搭建;动态窗体由几个类配合实现,分为设计期和运行期,开放的接口在本文中会详细介绍。关键词:窗体自动排版,模型,动态窗体,ERP44AbstractERP product development and application requirement of the different requirement of a wide variety of building Form. According to achieve form layout model dynamically generated Forms can be saved for manual layout Form Design trouble Form standardize all controls distribution, and storage was only storage model than static Window more storage space-saving, also more conducive to the development and maintenance of secondary; in the application, a customized user-defined Window personal requirement Form from the static definition of the higher end users, but the need for the training program to be completed, Form and typesetting functions of the need for user-defined Window on to the control, data, or even just set out the field, can generate more beautiful rows of windows. This paper introduces the ERP products based on the model of Window workstations automatic layout functions of specific requirement, design, various functions and details of the design is done, and the overall category structure, Form model highlights the structure and dynamic Form generation, and display the operating system and the process of formation of Form. Form model inherit from the model of the model-based workstations, and the need for each sequence of the target sequence of the preparation of the interface is done to prepare the main difficulty lies in the structure of the erection; Dynamic Form several class Accomplish, into the design and operation periods, open interface in this paper will be described in detail. Key words: Form Auto Layout, Model, Dynamical Form, ERP目录摘 要1Abstract2目录3Contents4第一章引言61.1.窗体自动排版与窗体排版模型61.1.1.窗体自动排版功能61.1.2.窗体排版模型71.2.基于模型台存取窗体排版模型71.3.本文的主要工作7第二章总体设计82.1.需求分析82.1.1.基本需求82.1.2.需求细项102.2.总体设计112.2.1.窗体排版模型总计设计112.2.2.窗体排版设计界面总体设计122.3.系统界面14第三章详细设计153.1.详细设计与详细类结构153.1.1.窗体排版模型类结构153.1.2.窗体排版功能窗体详细设计153.2.动态窗体的生成15第四章系统运行结果164.1.系统各模块界面说明164.1.1.设计主界面:164.1.2.栏位设置窗体:174.1.3.排版参数窗体:184.2.系统操作194.3.运行结果:生成动态窗体274.4.系统开发环境27第五章总结28致谢29参考文献30Contents摘 要1Abstract2目录3Contents4Chapter 1 Foreword51.1.FormAutoLayout&FormAutoLayoutModel51.1.1.FormAutoLayout51.1.2.FormAutoLayoutModel61.2.Model WorkbenchBased FormAutoLayoutModel61.3.Main Improvements6Chapter 2 Macro-Design72.1.Requirement Analysis72.1.1.Base Requirement72.1.2.Requirement Details92.2.Macro-Design102.2.1.FormAutoLayoutModel102.2.2.FormAutoLayout112.3.System UI12Chapter 3 Detailed Design133.1.Detailed Design&Class133.1.1.Class of FormAutoLayoutModel153.1.2.Detailed Design of FormAutoLayout153.2.Dynamic Form Generation13Chapter 4 Run System144.1.Introduction of Each Modules UI144.1.1.Main Designer UI:144.1.2.Fields-Setting UI:154.1.3.Layout Option UI:164.2.Operation of System174.3.Dynamic Form Generation254.4.System Development Environment25Chapter 5 Summary26Acknowledgement27References28第一章 引言3.1. 窗体自动排版与窗体排版模型3.1.1. 窗体自动排版功能ERP产品的开发和应用中,根据各个企业不同的需求或企业结构的不同,需要创建许多各不相同的窗体,例如单据窗口、联动窗口等,每个企业所需要的字段千差百异,如果直接在程序中编写每个窗体的代码或者为每个窗体创建一个静态的XML档,那么便需要开发人员在开发环境中设置每个窗体里每个控件的位置、大小、样式以及数据绑定,二次开发时还要为需求创建新的窗体,繁琐、成本高、维护困难;对于窗体上的控件,有时需要编写响应事件,如按钮的单击事件、控件的双击事件、键盘输入事件等,如果直接编写到窗体的程序代码中,需要修改或者添加事件时的复杂度非常高;就用户方面来说,用户不会想要为使用这个ERP产品而去学习编程,所以无法实现用户自定义窗体的功能。窗体自动排版功能实现根据排版模型动态生成窗体,可省去手动进行窗体排版设计的麻烦,规范窗体上所有控件的布局,开发人员只要设定排版模型的若干参数、规定控件类型以及顺序、设计数据库结构,并且存储时只需存储排版模型,比静态窗体的存储更节省空间,同时也更有利于二次开发以及维护;窗体事件以及数据绑定等会由模型中记录的ID或者LINK转接到中间层实做,共有事件可转接到同一的方法中实做,特殊事件则另外编写方法,降低维护、二次开发的复杂度和成本;在应用方面,用户有定制个人自定义窗体的需求,静态窗体的自定义需要较高端的用户,而且需要进行编程方面的培训方可完成,而窗体排版功能只需要用户定义在窗体上所要出现的控件、数据,甚至只需要列出字段,就可以生成更为美观整齐的窗体。另外,窗体数据转换为报表并打印的机制也是ERP产品的重要功能。静态生成的窗体必须要遍历窗体上的控件及其数据绑定,转换出报表,编码繁琐而且效率不高;利用窗体排版功能生成的窗体会以窗体排版模型记录,而转换到报表时也只需读取模型然后以类似窗体排版功能的机制生成报表即可。3.1.2. 窗体排版模型本次参与开发的ERP产品中,提出了模型这个重要概念,将许多需要大存储量的对象抽离大部分共有的属性,抽出存在差异的属性构建成模型。窗体排版模型由模型的基类继承,与记录整个窗体对比,在窗体排版模型上只记录一些大体的结构以及所有字段、字段的类型和顺序,大大节省存储空间;而从窗体排版模型生成动态窗体与从静态的窗体代码生成窗体效率几乎是一样的。窗体排版模型由于结构比实际窗体代码简单,更方便序列化,只需继承序列化的接口实做并重载基类的反序列化构造函数;序列化可从流或二进制数组存取,并可存储到本地文件中。3.2. 基于模型台存取窗体排版模型模型台顾名思义就是主程序中用来操作模型的模块,可以对任何从模型基类继承的模型类进行存取、搜索、编辑以及增删。在模型台上可直接打开窗体模型的排版功能窗口对窗体模型进行设计,同时也可在设计完ComDataSource模型后将该模型转换为窗体模型的数据源结构并打开排版窗口进行设计。设计完毕后可调用模型序列化的功能进行存取操作。模型台部分的功能主要由其它同事完成,所以在此不做赘述。3.3. 本文的主要工作本文主要介绍在ERP产品中基于模型工作台的窗体自动排版功能的具体需求、总体设计、各种功能与细项的设计、实做和总体的类结构,着重介绍窗体模型的搭建以及动态窗体的生成,并展示系统运行的操作过程和生成的窗体。窗体模型从模型工作台的模型基类继承,并为每个需要序列化的对象编写序列化的接口实做,编写时的主要难点在于结构的搭建,;动态窗体由几个类配合实现,分为设计期和运行期,开放的接口在本文中会详细介绍。第二章 总体设计3.1. 需求分析3.1.1. 基本需求(1) 生成的动态窗体的基本需求:动态窗体分为若干个区(Section),区总共为六种:状态区(StateSection):主要放置当前日期、当前时间以及单据制作人等公共信息;主文区(MainSection):主要放置从数据库读取的产品编号、产品名称等等主要内容;页签区(TabSection):用于放置多页签控件;表格区(GridSection):用于放置表格控件,表格控件可存放多条细项,例如从关联的子表中读取的一笔单据中的多条细项资料;尾文区(FootSection):主要放置制作信息等内容;功能区(ControlStripSection):提供对该窗体的操作,比如上一笔、下一笔、第一笔、最后一笔、打印、保存、放弃、修改等等操作,本区放置的内容和其他区有根本上的差别,所以独立处理,放置按钮和菜单;动态窗体至少包含其中的一个区,包含多个区时按照以上列出的顺序排列,每种区只能出现一次。除功能区外的五个区以TOP的DockStyle显示,而功能区以BOTTOM的DockStyle显示。区中放置区域(Area),区域包含五种类型:控件区域(Area):只存放单字段控件(SingelFieldControl)或者组合控件(ComboControl),并能够根据所包含控件的顺序和列数行数生成相对应的界面,不包含容器控件;表格区域(GridArea):只存放表格控件(GridControl)和扩展表格控件(AdvanceBandedGridControl),不包含容器控件;可设置表格区域中表格的排列方式(左右排或者上下排);组区域(GroupArea):容器控件,可放置除页签外其它各种区域,并显示本区域的标题;多页签区域(TabArea):容器控件,只能放置页签区域,在生成动态窗体时会生成多页签控件;页签区域(TabPageArea):容器控件,可放置除页签外其它各种区域,并显示本区域的标题,只能包含在多页签区域中,在动态窗体中时多页签控件的一个页签;控件区域中放置单字段控件或者组合控件:单字段控件:包含显示名称和显示字段的控件,一个单字段控件对应一个数据库的实际字段或者日期时间报告人等公共实际字段,显示字段的控件可设定其控件类型和大小;组合控件:包含显示名称和多个单字段控件,可设置组合控件的大小,并可设置每个单字段控件类型和所占位置的比例;表格区域中放置普通表格控件或者扩展表格控件:普通表格控件:可设置表格中的列和每个列对应的数据库的字段;可设置是否自动生成序号列、每个列的宽度;扩展表格控件:基本实现与普通表格控件相同;支持列分组、嵌套分组和列组合功能;列分组、嵌套分组功能如图1,可以把表中的列分为若干个分组,分组之间可进行嵌套:图2-1 列分组嵌套分组功能列组合功能如图,可以对每个分组下面的列进行排列布局,而在表中的数据也将会以与列的布局相同的布局显示出来:图2-2 列组合功能(2) 窗体排版功能主要需要实现以下功能:窗体排版功能需要包含窗体模型排版设计界面;载入和保存窗体排版模型的功能;载入数据集,载入数据类型控件类型对应关系的功能;打开设计界面后能够进行添加删除区、区域、组合控件、表格、扩展表格、按钮以及菜单等功能;对添加的各种对象列出其属性,并且可对可读写的属性进行修改;控件区域、表格、扩展表格等对象可打开栏位设置窗口,设置对象能包含的字段;栏位设置窗口中可设置字段的控件类型、是否显示名称、大小以及是否可见等属性,可通过拖动操作来设置字段的显示顺序;能够调出窗体排版参数设置窗体,对窗体边距、控件间距等排版参数进行设置;能够生成预览;能够生成动态窗体;3.1.2. 需求细项(1) 各种对象的属性可在属性编辑器或者类似的列表控件中列出并可修改可读写的属性,每个对象的需要设置的属性如下:窗体:窗体标题(显示在窗体上的名称)、自定义大小、窗体类型、关联的ComDataSource;区:区标题、区名称、区类型、自定义高度;区域:区域标题、区域名称、区域类型、自定义高度,表格区域还需设置表格排列方式;组合控件:显示名称、控件名称、大小、显示名称在组合控件中的显示比例以及是否显示、顺序、是否只读、是否可见;表格:表格名称、自定义高度、显示顺序、存在多个表格时所占的比例;扩展表格:表格名称、自定义高度、显示顺序、存在多个表格时所占的比例、是否显示分组;表格分组:显示名称、是否显示、是否固定分组;按钮:显示名称、事件ID;菜单:显示名称、事件ID;设计窗体在关闭时需询问是否保存模型。(2) 栏位设置窗体中字段所需设置的属性如下:、能够打开栏位设置窗体的对象有控件区域、组合控件、表格以及扩展控件,打开栏位设置窗体以后会在窗体左边列出数据集,右边列出对象包含的字段集合,在左边列表上勾选后可将其添加到字段集合或者从字段集合中删除,字段集合列表可对每个字段的属性进行设置。控件区域中的字段:显示序号、字段名称、所属数据表、字段类型、是否只读、控件类型、显示名称、所占列数、所占行数、是否可见;组合控件中的字段:显示序号、字段名称、所属数据表、字段类型、是否只读、控件类型、显示名称、所占比例、是否可见;表格与扩展表格中的字段:显示序号、字段名称、所属数据表、字段类型、是否只读、控件类型、显示名称、所占宽度、是否可见;栏位设置窗体关闭时需询问是否保存编辑后的字段集合。(3) 排版参数窗体所需设置的参数如下:边距:行边距、列边距、各方向是否相同;间距:上、下、左、右间距、各方向是否相同;其它:单元格大小、表格默认高度、栏位文本长度、窗体默认大小;3.2. 总体设计3.2.1. 窗体排版模型总计设计窗体排版模型类(FormLayoutModel)由模型基类(ModelBase)继承,重写序列化和反序列化方法,类中包含窗体所要记录的属性:窗体标题(显示在窗体上的名称)、自定义大小、窗体类型、关联的ComDataSource;包含区的集合(SectionCollection)和排版参数类(LayoutOption)的对象,该集合中每个类型的区最多出现一次且按顺序出现。排版参数类(LayoutOption) 包含边距、间距、单元格大小、表格默认高度、栏位文本长度、窗体默认大小等属性,边距为Padding类的对象,间距为Size类的对象;集合继承自Dictionary或Collection,以便对集合等添加修改等进行限制和操作。区类型枚举(SectionType) 记录不同的区类型,共六种:状态区、主文区、页签区、表格区、尾文区和功能区。区(Section)的基类为SectionBase,包含各种区的共有属性;另有枚举SectionType指定不同区;各种区由SectionBase这个基类继承,重写基类的SectionType属性,并在各自类中实现不同的操作。SectionBase包含区域集合(AreaCollection),功能区中还包含功能集合(CommandStructCollection)。生成动态窗体时,每个区以明确的控件(比如Panel)分离开来。区域类型(AreaType)记录不同等区域类型记,共五种:控件区域(Area)、表格区域(GridArea)、组区域(GroupArea)、多页签区域(TabArea)以及页签区域(TabPageArea)区域(Area)的基类为AreaBase,包含各种区域的共有属性;每个区域需要实现的需求在前面的需求设计中已经列出,这里就不加赘述。AreaBase上包含有子区域集合,各种不同类型的区域继承以后对该子区域集合的添加事件进行重写,限制能够添加的子区域的类型,其中控件区域和表格区域将该属性重写为只读属性,返回一个空的子区域集合。区域子类上有实现不同操作的有:页签区域继承自组区域;控件区域上包含字段集合(ControlDictionary);表格区域上包含表格集合(GridStructDictionary);表格区域包含表格排列方法的属性。控件字段的基类为Controlbase,包含显示名称、所占列数、所占行数、是否可见、显示名称所占的比例等共有属性,派生类单字段控件(SingleFieldControl)包含字段名称、所属数据表、字段类型、是否只读、控件类型、所占比例等属性,组合控件类(ComboControl)包含子字段集合;表格(GridStruct)包含表格的名称、自定义高度、实际高度、当存在多个表格时所占比例、单字段集合;扩展表格(BandedGridStruct)继承自表格,包含分组集合(BandCollection),是否显示分组栏位。分组(Band)包含名称、显示名称、子分组集合、是否拥有子分组、单字段集合等属性。功能类(CommandStruct)包含名称、显示名称、类型(CommandType)、子功能集合、事件类型(EventType)、事件ID等属性;其中类型用来判断该功能是以按钮方式呈现还是以菜单方式呈现。3.2.2. 窗体排版设计界面总体设计窗体排版功能总共包含四个窗体,设计主界面、栏位设置窗体、排版参数窗体和预览窗体。(1) 设计界面:以树状图表现当前正在修改的模型,且树状图中的每个节点都要关联模型上的相应对象;包含属性编辑器,该属性编辑器能够读取树状图的选中节点的关联对象并进行修改,修改后更即时更新树状图;提供添加模型中各种对象的按钮和菜单,在树状图中的选中节点上添加节点并在模型中添加相应对象;当改变当前树状图的选中节点时根据节点的关联对象判断哪些按钮或菜单不可用;当选中节点的关联对象为控件区域、组合控件、表格、分组时能够打开栏位设置窗口;提供打开排版参数窗体和预览窗体的按钮;(2) 栏位设置窗体:在复合文本框中列出当前数据集的所有数据表,当选择某数据表时将其所有字段列出;字段以树状图形式列出,根节点是当前选中的数据表的名称,根节点的子节点列出字段;该树状图所有节点前有复选框,当选中复选框时,就将字段添加到设计窗体中选中节点的关联对象的字段集合中,取消选中复选框时则是从该字段集合中删除;以表格形式列出当前设计窗体选中节点的关联对象的字段集合,表格的列列出字段的所有属性,而每一行则对应一个字段;对单个字段,可在列中改变其相应属性;该表格支持内嵌控件,当编辑单元格时可以激活该单元格对应的内嵌控件进行编辑;该表格支持直接拖动行,改变字段在字段集合中的顺序;(3) 排版参数窗体:列出当前模型的排版参数对象的所有属性以及值,修改后返回给该对象;(4) 预览窗体:将窗体排版模型换算成窗体上的控件,并将其放置到根据窗体排版模型的窗体类型取得的窗体中,将该窗体显示出来。3.3. 系统界面图2-3 窗体排版模型设计界面第三章 详细设计由于公司的保密需要,本章不采用实际的源码进行描述。3.1. 详细设计与详细类结构3.1.1. 窗体排版模型类结构窗体排版模型的结构照如前文中需求细项和总体设计中所述架构编写,所以不加赘述,以下是构建完窗体排版模型后使用Visual Studio 2005生成的类图:图3-1 详细类图3.1.2. 窗体排版功能窗体详细设计当设计窗体中选中模型的树状图的节点以后,按钮或菜单的Visible会相应节点对应的对象而改变,关系如下表:表3-1对象可用功能对应表添加区域组区域Tab区域TabPage区域控件区域表格区域添加组件组合字段表格扩展表格表格分组功能按钮功能菜单栏位设置状态区TRUETRUETRUETRUETRUE主文区同状态区页签区同状态区表格区TRUETRUE尾文区同状态区功能区TRUE组区域TRUETRUETRUETRUETRUETab区域TRUETRUETabPage区域同组区域控件区域TRUETRUETRUE表格区域TRUETRUETRUE组合字段TRUE表格TRUE扩展表格TRUETRUE表格分组TRUETRUETRUE功能按钮TRUETRUE功能菜单TRUETRUE其余功能都是窗体的基本编程或总体设计中已有详细说明,这里不加赘述;3.2. 动态窗体的生成生成动态窗体其实就是将窗体排版模型上的对象一一换算成窗体的对应控件;首先会根据模型记录的窗体类型取回所要的窗体;生成控件时将对象的Name属性赋给控件的Name属性,以便动态生成事件时获取控件;每个控件会根据相应对象记录的事件类型和事件ID取回要执行的事件,用户亦可编写脚本事件,而后由脚本翻译器生成事件后取回。区(Section),生成Panel,除功能区外的区的停靠风格为置顶(DockStyle.Top),由于后置顶的控件会排到先置顶的区的上面,所以换算区(void Section2Layout()的时候以逆序读取换算区后换算区中的子区域集合(int Area2Layout(AreaCollection areas,Control parent);区高度当用户自定义高度时则取自定义高度,否则取换算子区域集合的方法返回的高度和。区总共为六种:状态区(StateSection):放置当前日期、当前时间以及单据制作人等公共信息;主文区(MainSection):放置从数据库读取的产品编号、产品名称等等主要内容;页签区(TabSection):用于放置多页签控件;表格区(GridSection):用于放置表格控件,表格控件可存放多条细项,例如从关联的子表中读取的一笔单据中的多条细项资料;尾文区(FootSection):主要放置制作信息等内容;功能区(ControlStripSection):本区的停靠风格为置底(DockStyle.Bottom),有专门的换算功能区的方法(void ControlStripSection2Layout(ControlStripSection section),其中调用换算功能区下功能集合的方法(void CommandStruct2Layout(CommandStructCollection commands,Panel parent);区域(Area),根据不同的区域类型生成不同的控件,所有控件的停靠风格均为置顶(DockStyle.Top),换算区域时递归换算区域中的子区域,直到没有可换算的子区域为止(即只剩控件区域和表格区域);区域高度当用户自定义高度时则取自定义高度,否则取换算子区域集合的方法或换算控件集合、表格集合返回的高度和。区域包含五种类型:控件区域(Area):生成Panel,调用换算字段集合(int Fields2Layout(ControlDictionary fields,Control parent)的方法,取返回的值做为区域的高度;表格区域(GridArea):生成Panel,调用换算表格集合(int Grids2Layout(GridStructCollection grids,Control parent)的方法,取返回的值做为区域的高度;组区域(GroupArea):生成GroupBox控件,换算子区域集合,取子区域高度和做为本区域的高度;多页签区域(TabArea):生成TabControl或者DevExpress的TabedControl控件,换算子区域集合,取子区域(即TabPageArea)的最大高度做为本区域的高度; 页签区域(TabPageArea):生成TabPage控件,换算子区域集合,取子区域高度和做为本区域的高度; 控件区域中换算单字段控件或者组合控件的方法首先为每个控件字段生成Panel,这些Panel按照控件字段的顺序从左到右从上到下排列,排满控件区域所设置的列数时换行;位置该Panel所处相对座标单元格大小间距;大小单元格大小控件字段的相对大小;在该Panel中:单字段控件:读取当前字段的控件类型生成控件(Activator. CreateInstance(Type type), 停靠风格为充满(Fill);当是否显示字段名称为true时,生成Text属性为字段的显示名称的Label,停靠风格为填充左边(Left),宽度为排版参数中的栏位文本长度属性;组合控件:读取子字段集合中每个字段的控件类型生成控件(Activator. CreateInstance(Type type),通过字段的所占比例属性计算该控件在组合控件中所占长度;当是否显示字段名称为true时,生成Text属性为字段的显示名称的Label,停靠风格为填充左边(Left),宽度由组合控件中设定的文本显示比例计算得出;表格区域中换算普通表格控件或者扩展表格控件的方法生成DevExpress的GridControl的实例;根据表格区域中规定的表格排列方法和排版参数中表格默认大小的属性计算表格的位置和大小,当左右排时根据表格的所占比例计算表格的宽度;根据字段生成对应的DevExpress的内嵌型控件,表格中添加一行空数据以展示内嵌控件;以上为表格和扩展表格共用的换算方法,以下为各自不同的算法:普通表格控件:生成GridView,设置为GridControl的MainView;根据普通表格控件中记录的单字段集合和每个字段的宽度生成表格中的列;根据是否自动生成序号列决定是否生成序号列;扩展表格控件:生成AdvanceBandedGridView,设置为GridControl的MainView;递归换算分组集合;根据是否自动生成序号列决定是否生成序号列;分组:递归换算分组集合;当分组集合为空时,换算分组中单字段集合,根据每个字段的属性生成分组中的列;列分组、嵌套分组和列组合等功能只需将分组或字段中的相应属性赋给实际的分组或列,GridControl会自动调整为所要的结果;功能集合:递归换算子功能集合,第一层功能集合的类型为CommandStruct.Button,生成按键;以下的类型全部为CommandStruct.Menu,生成菜单和子菜单;第四章 系统运行结果3.1. 系统各模块界面说明3.1.1. 设计主界面:如图4-1,左边是窗体模型的树状图,右边是属性编辑器,下方是设计功能的按钮;通过下方的添加按钮可添加相应对象到窗体模型并在树状图中添加相应节点,选择树状图节点后可在属性编辑器中修改该节点关联的对象的属性;删除按钮可删除选中的树状图节点及其关联的模型中的对象;栏位设置、排版参数、预览按钮可打开相应的窗体。关闭时询问是否保存模型。图4-1 窗体排版模型设计主界面3.1.2. 栏位设置窗体:如图4-2,左边是窗体所关联的数据集,在复合框中选择数据表名称后可列出数据表中的所有字段,当勾选或者取消勾选字段时添加或者删除设计窗体中选中节点字段集合中的字段。图4-2 栏位设置窗体3.1.3. 排版参数窗体:设置当前窗体模型的排版参数,如图4-3。图4-3 排版参数窗体3.2. 系统操作载入模型关联的数据集、控件映射后,载入模型可对已有模型进行修改,直接打开模型设计窗口可新建空模型,如图4-4;图4-4 添加区添加节后添加区域,如图4-5到图4-7:图4-5 在区下添加区域图4-6 表格区(GridSection)只能添加表格区域(GridArea)在功能区中添加功能按键和菜单,如图4-7到图4-8:图4-7 在功能区下添加功能按键图4-8 在按键下添加功能菜单图4-9 在菜单下添加子菜单在表格区域下添加表格和扩展表格,如图4-10到图4-12:图4-10 在表格区域下添加表格和扩展表格图4-11 在扩展表格下添加分组图4-12 在分组下添加子分组图4-13 在控件区域下添加组合控件分别对控件区域、组合控件、表格和扩展表格进行栏位设置,如图4-14到图4-17:图4-14 栏位设置窗体图4-15 为控件区域进行栏位设置图4-16 为组合控件进行栏位设置图4-17 为表格或扩展表格的分组进行栏位设置进行排版参数设置图4-18 进行排版参数设置3.3. 运行结果:生成动态窗体根据设计窗体设计好的的窗体排版模型生成的动态窗体,如图4-19:图4-19 根据设计窗体设计好的的窗体排版模型生成的动态窗体3.4. 系统开发环境操作系统:Windows XP SP2开发工具:MicroSoft Visual Studio 2005.Net FrameWork2.0控件包:DevExpress DXperience 6.1.6开发语言:C#.Net FrameWork2.0第五章 总结窗体排版功能大大方便了开发人员在ERP产品的开发和二次开发中的窗体方面的工作,简化了创建窗体所需的操作,能够很好的满足用户对自定义窗体的需求,同时更容易与报表机制挂钩。在开发过程中,对每个类都有详细分析并评估,努力做到“高内聚,低耦合”,使对代码的改动、添加功能更加容易,更加安全;抽出Service接口,开放易于使用的方法,生成的程序集可以很容易地任意挂接到其他人所开发的环境中去。本次的实习刚开始时,我还没接触过C#这门语言,连Visual Studio2005也用的不是佷熟练。而在参与项目开发的这四个月中,从各个角度各方面的应用深入的了解了C#的语言特性,学会利用Visual Studio 2005进行高效的代码编写。在编程方面,对全局有了更清醒的认识和规划,在代码编写时能够想得更远,考虑的更全面,这一点体现在我所编写的程序上,从一开始的逻辑不严谨、错误百出到越来越健壮、易于添加新需求的实现,学会应用多种设计模式且能够应用在更合适的地方。另外还熟悉了DevExpress这套强大的控件的应用和机制,了解了.Net Framework2.0下窗体设计期的机制和Visual Studio 2005窗体设计器的部分机制。最后,本次实习让我在大学与社会的交接点上向前迈出了重要的第一步,能够融入企业的氛围,能够在大学里所没有的工作压力下积极努力的工作,我觉得这是最大的收获。致谢在完成毕业论文之际,我有无限的感慨和满腔的谢意要说。我首先要感谢我的指导教师教授,他高超的学术水平、不懈的治学追求和严谨的学术态度让我受益良多。他对我的严格要求和细心指点使我在学术之路上能迈过坎坷,继续前行。其次我要感谢我的父母,他们对我的殷殷期望和谆谆教诲是我四年来前进的重要动力,他们的爱是我永远可以依靠的。然后我还要感谢我的同学和朋友,还有公司的同事,他们帮我克服了研发中遇到的重重困难。我需要感谢的人实在太多而无法一一列举,但是请相信,我已将大家对我的无私关心和热情帮助铭记在心。参考文献1 Tom Archer. C#技术内幕 M. 北京 : 北京大学出版社, 2001.2 Stewart Fraser, Steven Livingstone. C# XML入门经典M. 北京-清华出版社 2003.3 Christian Holm, Mike Kruger, Bernhard Spuida. C#软件项目开发全程剖析 M. 北京-清华大学出版社 2003.4 Steven John Metsker. C#设计模式 M. 北京-中国电力出版社 2005.5 张玉平, 李长林. 深入浅出C#编程 M. 北京-中国科学技术出版社 2004.6 Richard Conway, Teun Duynstee. C#类设计手册 M. 北京-清华大学出版社 2003.7 Simon Robinson, K. Scott Allen. C#高级编程 M. 北京-清华大学出版社 2002.8 张善友. 用.NET Framework 2.0创建 Form设计器翻译 Z. /shanyou/archive/2006/06/07/designerhosting.html. 2006-06-07.9 Microsoft Corporation. .NET Framework 开发人员指南序列化Z. /zh-cn/library/7ay27kt9(VS.80).aspx. 2007.10 Microsoft Corporation. Visual C# 开发环境使用 Visual C# IDEZ. /zh-cn/library/ms173063(VS.80).aspx. 2007.附件一:厦门大学软件学院毕业设计(论文)开题报告学生姓名班级一班学号指导教师姓 名职称教授所在单位厦门大学软件学院毕业设计(论文)题 目基于模型台的窗体自动排版毕业设计(论文)的目标:1. 窗体自动排版功能ERP产品的开发和应用中,根据各个企业不同的需求或企业结构的不同,需要创建许多各不相同的窗体,例如单据窗口、联动窗口等,每个企业所需要的字段千差百异,如果直接在程序中编写每个窗体的代码或者为每个窗体创建一个静态的XML档,那么便需要开发人员在开发环境中设置每个窗体里每个控件的位置、大小、样式以及数据绑定,二次开发时还要为需求创建新的窗体,繁琐、成本高、维护困难;对于窗体上的控件,有时需要编写响应事件,如按钮的单击事件、控件的双击事件、键盘输入事件等,如果直接编写到窗体的程序代码中,需要修改或者添加事件时的复杂度非常高;就用户方面来说,用户不会想要为使用这个ERP产品而去学习编程,所以无法实现用户自定义窗体的功能。窗体自动排版功能实现根据排版模型动态生成窗体,可省去手动进行窗体排版设计的麻烦,规范窗体上所有控件的布局,开发人员只要设定排版模型的若干参数、规定控件类型以及顺序、设计数据库结构,并且存储时只需存储排版模型,比静态窗体的存储更节省空间,同时也更有利于二次开发以及维护;窗体事件以及数据绑定等会由模型中记录的ID或者LINK转接到中间层实做,共有事件可转接到同一的方法中实做,特殊事件则另外编写方法,降低维护、二次开发的复杂度和成本;在应用方面,用户有定制个人自定义窗体的需求,静态窗体的自定义需要较高端的用户,而且需要进行编程方面的培训方可完成,而窗体排版功能只需要用户定义在窗体上所要出现的控件、数据,甚至只需要列出字段,就可以生成更为美观整齐的窗体。另外,窗体数据转换为报表并打印的机制也是ERP产品的重要功能。静态生成的窗体必须要遍历窗体上的控件及其数据绑定,转换出报表,编码繁琐而且效率不高;利用窗体排版功能生成的窗体会以窗体排版模型记录,而转换到报表时也只需读取模型然后以类似窗体排版功能的机制生成报表即可。2. 窗体排版模型本次参与开发的ERP产品中,提出了模型这个重要概念,将许多需要大存储量的对象抽离大部分共有的属性,抽出存在差异的属性构建成模型。窗体排版模型由模型的基类继承,与记录整个窗体对比,在窗体排版模型上只记录一些大体的结构以及所有字段、字段的类型和顺序,大大节省存储空间;而从窗体排版模型生成动态窗体与从静态的窗体代码生成窗体效率几乎是一样的。窗体排版模型由于结构比实际窗体代码简单,更方便序列化,只需继承序列化的接口实做并重载基类的反序列化构造函数;序列化可从流或二进制数组存取,并可存储到本地文件中。3. 基于模型台存取窗体排版模型模型台顾名思义就是主程序中用来操作模型的模块,可以对任何从模型基类继承的模型类进行存取、搜索、编辑以及增删。在模型台上可直接打开窗体模型的排版功能窗口对窗体模型进行设计,同时也可在设计完ComDataSource模型后将该模型转换为窗体模型的数据源结构并打开排版窗口进行设计。设计完毕后可调用模型序列化的功能进行存取操作。4. 论文的主要工作论文主要介绍在ERP产品中基于模型工作台的窗体自动排版功能的具体需求、总体设计、各种功能与细项的设计、实做和总体的类结构,着重介绍窗体模型的搭建以及动态窗
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 复旦数学专业真题及答案
- 外墙防腐保温施工技术标准与规范方案
- 2025年甘肃招聘考试真题及答案
- 混凝土回收与再利用技术方案
- 广告牌制作合同4篇
- 碳捕集利用设备维护与保养方案
- 高级管理人才离职经济补偿及竞业限制协议
- 2025年幼儿教育史试题及答案
- 平凡的荣耀测试题及答案
- 离婚财产分割与债务承担详细协议书
- 2025年国家网络安全宣传周知识竞赛题库(试题及答案)
- 排水管网施工重难点及污水处理措施
- 田径教学专题篇课件
- 超声科院感知识培训
- 手术室眼科无菌技术课件
- 上消化道出血中医护理常规
- 价值导向引领下的企业增值型内部审计实践:D公司深度剖析
- 2025秋统编版(2024)道德与法治二年级上册第四单元《第13课 美丽中国我的家》教学设计
- 细胞生物学-第五章-物质的跨膜运输
- 大学生的环境适应与心理健康
- 云计算对法律数据处理模式的重塑-洞察阐释
评论
0/150
提交评论