用户控件设计

关键词: 页面 前台 控件 用户

用户控件设计(精选六篇)

用户控件设计 篇1

前台页面顶部导航用户控件的效果, 该控件比较简单, 上面是几个图用来装饰页面, 下面的一行是图片分类的超级链接, 这些信息是从数据库中读取出来的。

二、前台页面顶部导航用户控件具体实现

接下来给出该用户控件的源代码, 这里面包括页面显示的.ascx文件和事件处理的.VB文件。

在.ascx中定义一个名为“main”的div层, 同时在该层中放置一个table, 用来组织页面的结构。Table的第一行是几个图片的静态超级链接。

Table的第二行里面内嵌了一个table, 用来显示图片和图片分类的超级链接。注意图片分类的超级链接实际是一个label, 在页面加载的时候, 读取所有的分类信息, 然后链接在一起。

在页面的底部定义一个名为“bot”的div层, 该层没有动态读取和显示的内容, 所有信息都是静态的。

三、后台管理系统页面顶部导航用户控件设计

下面一个用户控件是后台管理系统页面顶部导航用户控件, 这个控件比前台页面的顶部导航控件简单, 仅仅是将超级链接放在一起了。

不过该控件还有另外一个功能, 就是判断用户是否具有后台操作的权限, 也就是判断用户是否登录。

四、后台管理系统页面顶部导航用户控件具体实现

先给出admintop.ascx的源代码, 它仅包含一个名中top的层, 然后里面是所有后台管理功能的超级链接。源代码:admintop.ascx如下。

接下来是该用户控件的.vb文件。具体代码见附录admintop.ascx.vb。该用户控件的Page_Load () 方法处理页面加载事件。首先判断用户名和密码是否为空, 如果不为空, 就用这些信息去数据库验证身份, 如果不能通过身份, 则将页面导向首页。同时, 如果用户名和密码为空, 也将页面导向首页。

五、上传图片用户控件具体实现

先来看upload.ascx用户控件的页面源代码, 该页面包含一个form, 里面是一个文件选取的file控件和一个上传文件的确定按钮。源代码upload.ascx.vb主要用到了Page_load () 方法, 处理页面加载事件。该方法比较简单, 设置两个控件的文本属性。下面两行代码是初始化页的代码:

upSpan.InnerText=uploadText

uploadBtn.Text=submitText

uploadBtn_Click () 方法, 处理文件的上传操作。首先获取文件的扩展名, 然后判断文件的扩展名和文件大小是否合法。如果合法, 则用年、月、日、小时、分钟和秒的组合来定义保存文件的名字, 然后上传文件到服务器上, 并且给出成功的提示。

chetype () 方法, 对文件类型和文件的大小进行判断。如果文件类型为空或文件大小为0, 则返回0。如果文件类型是jpg、gif、bmp等, 或者文件小于500KB, 则返回2, 说明通过检测。

参考文献

[1]李国辉, 胡晓峰.基于内容的检索.计算机世界报, 1998 (18) .

[2]柳伟, 曹莉华.基于内容的图像检索技术.计算机世界报, 1998 (l8) .

[3]Fliekner, M et al, Query by image and video conient:the QBICsystem, IEEE Computer, 1995, 28 (9) :23-32.

[4]Gupta, A et al, The Virage image seareh engine:an openframework for image management in Storage and Retrievalf or Imageand Video Databases I V, ProeSPIE2670, 1996:76-87.

设计用户体验 篇2

在唐硕咨询创始人黄峰看来,王卢然遇到的问题并非个例,其原因便是许多国际酒店集团的中文版网站的规划与设计皆由位于欧美的总部或外国设计团队所主导,沟通成本高,且因为语言的不同与时差关系整体沟通效率低。

“我们当时存在的问题是如何打造更符合中国消费者需求的品牌入口网站,以提升其在中国的在线市场占有率。”洲际集团大中华区网站与互动营销产品经理James Xu说。唐硕咨询从2011年开始帮助洲际集团规划并设计其全新中文入口网站和移动服务。

通过可用性测试,唐硕咨询在当时的洲际官网上发现了47个可用性问题,其中,内容和呈现两方面的问题最为突出,黄峰给出了一些快速的设计解决方案帮助美国的技术团队在短时间内了解到了网站存在的各种主要问题。

黄峰创立的唐硕咨询就是为各类网站、产品和线下零售网点提供用户体验设计服务的咨询公司。在过去6年,公司每年年收入的增长率都保持在40%以上,2012年的收入为2200万。

2003年年底,黄峰和几个留学回国的同行一起创办了国内第一个用户体验专业志愿者组织UXPA,这是国际用户体验组织在中国的分支机构。自2005年起,他们成功策划了用户体验行业年会User Friendly,9年来每年都会举办一次。

唐硕咨询的另外两个创始人夏方昱、黄胜山在学生时代就是UXPA的志愿者,目前夏方昱是体验策略总监,负责金融领域的拓展;黄胜山为商务总监,负责整个公司的商务和基本运营。

2007年创立唐硕咨询时,公司的创始资金只有30万人民币。“咨询公司的两大成本,一是人力成本,另一个就是营销成本。”黄峰说。在做论坛时认识了很多行业内的人,让他大大减少了这两大成本。

管理行业协会不仅为黄峰找到了合作伙伴,还为他带来了第一位客户。经UXPA中的朋友介绍,黄峰得知通用医疗想做一个针对中国市场的玲珑数字X光扫描机系统,希望能通过中国本土的用户体验咨询公司对中国的三甲医院进行一个深入的了解,简化整个X光机操作系统的模块、流程和界面,从而降低患者拍摄X光片的时间。

在6年之前,“用户体验设计”这个概念在国内并不被人广泛了解,很多人认为“用户体验设计”就是UI设计,或是做美工的。类似通用医疗这类跨国公司,也并不信任国内的用户体验设计团队,而Frog、IDEO这类成熟的国外设计公司在国内价格又非常贵。

黄峰认为这正是唐硕咨询的机会所在。“那时候大多数设计公司只能做个造型设计或视觉界面设计。”黄峰说。

当时黄峰带着4个人的团队在全国11个省份选了25家医院、137名医生进行访谈,并重新梳理了整个操作系统,设计了三套新的交互和视觉的界面系统,然后又在十家医院进行了一个新系统的验证。

通用医疗公司经过了三个月的评估,最终选择了唐硕咨询团队的方案,这个160多万元的项目是唐硕咨询拿到的第一笔单。

在拓展客户上,黄峰逐渐形成了自己的关系网络。“你认识的不能只有UI设计师,还需要有产品经理、运营管理还有高级管理者。”在公司创建的前几年,唐硕的整个发展都是靠口碑。客户是通过一些朋友的介绍,或者是在做论坛活动时认识的。

从2012年开始,唐硕咨询开始做垂直领域自媒體,主动在一些垂直商业领域宣传用户体验的方法和案例,如举办了介绍金融行业用户体验的“未来银行”创新论坛,邀请了富国银行、万事达、招商银行等在金融领域具有创新优势的公司,探讨金融体验创新的趋 势。

黄峰开始频繁地在一些会议上进行演讲,分享成功案例,再通过各个领域的圈子进行口碑传播,扩展客户群。他认为,这对他们迅速在某些领域建立品牌效应很有帮助。

在公司成立的第二年,黄峰就遇到了一道“坎”。他发现自己开始把公司往走量的路径上领导。“如果今年是100万的销售额,那么明年就得做到200万,第三年必须达到300万,这样的经营模式无法支撑公司日后的发 展。”

在2008年的时候,黄峰接了一个联发科的单子,客户让黄峰的团队跟他们的研发人员一起策划一个类智能手机的操作系统。

“你能想象到,在创业的第二年,一个15个人的团队,接到了一个近500万元的项目,我们有多么开心。当时公司还有另外几个100万左右的项目在同时操作,觉得当年的营业额很快就要过千万了。”黄峰觉得公司后面的发展会进入快车道,需要立刻扩大规模,所以当时一下子就多招聘了10个人。2008年初开始,为了方便拓展其他城市的业务,黄峰陆续在北京、厦门、深圳和杭州开办了4个工作室。

在联发科的项目结束后,正好赶上2008年年底的国际金融危机,国外也没有新项目进来。这就导致唐硕咨询在一段时间内人力浪费严重,整个公司的成本大幅上升。黄峰只能用公司以前攒下来的钱去养多余的人 力。

分公司建设策略不明确也是导致唐硕咨询成本上升的原因。当时每个分公司的定位是什么,是一个做项目的团队还是市场拓展的团队,怎样远程管理,这些问题黄峰并没有想得很清楚,后来慢慢发现,仅差旅成本一项,某些仅有五六人的工作室每年就有30多万元的支出。黄峰逐渐把分公司的大办公室换成了小一点的办公室。

黄峰觉得,这是当时自己团队的管理能力不够造成的—总是做眼前的东西,没有想好未来可能会怎样。整个2009年下来,唐硕咨询的成本一下子上升了50%。直到2010年初经济开始复苏,公司的国际项目才慢慢多起来。

这使得黄峰开始从看重年销售额改为开始重视人均产出。“人均产出增加说明人员效率增加、利润率增加,这是咨询公司与产品公司的区别,也是衡量一个咨询公司服务能力的表现。”黄峰补充道,“想要增加人均产出,就要选择附加值高的客户和项目合作,随着口碑和交付品质的提升合理提高人员单价,同时加强内部管理,控制人员数量,提升工作效率和更加充分地利用人员碎片时间。”

nlc202309041323

唐硕咨询在过去两年的净利润率为22%,而在最早创立的前三年,这一数字为35%以上。利润比前几年有所下降的主要原因是人力成本不断上升。一些国内大的互联网公司开始逐渐关注用户体验设计,也开始组建用户体验设计团队,人才方面上也有所竞争。“在三年之前,唐硕咨询与大公司抢人才是没有竞争力的,我们只能靠做一些很有意思的项目来让大家增加经验以留住人才,但是从2010年开始,我们整个公司过去三年平均每年的薪资涨幅接近20%。”

现在,唐硕咨询的商业模式更多以IDEO公司为参照,其业务范围也远远超出了设计类范畴,更像是以设计为形式的用户体验顾问公司。IDEO在全球的400名员工只有一半是设计师,而剩下的人有心理学家、计算机专家、建筑师和商务管理专家。

“IDEO給设计行业开启了一种全新的设计思维,将‘人性因素’引进到设计过程中来,多领域的设计师们从人体工学、国际化、环境工程等多个视角考察消费者心态,进而洞悉潜在的需求。”黄峰说。

唐硕咨询刚创业时没有专职做视觉设计的团队,黄峰将这部分业务外包给第三方设计公司做,随着后来业务量越来越大,黄峰收购了一个做视觉设计的工作室。

“我们的竞争对手主要集中在视觉设计或者基础用户研究领域,这类公司的创始团队背景一般比较单一,而唐硕创始团队成员的专业背景比较分散,分别有咨询、用户研究、交互设计和设计策略,这是与其他设计类公司最大的区别。”唐硕咨询商务总监黄胜山称,唐硕咨询是国内首家提供UCD(User Centered Design)全流程服务及UCD管理咨询的公司。

从2012年起黄峰开始选择垂直商业领域作为主攻方向,每个领域有专业团队负责拓展,公司集中资源和精力在这个领域摸索出一个新的用户体验概念方案。“寻找一个国际顶尖品牌不惜代价合作,集中优势人员做出效果协助上线。”黄峰说。

洲际酒店集团就是黄峰在旅游领域发展的一个核心客户。2012年洲际集团再次与唐硕咨询开始了中国官方网站用户体验项目。

黄峰和团队在这个重要的项目中采用了跨渠道(Web、Wap、App等)体验的研究方法。“了解了中国中高端酒店消费群体的人物信息、特征、行为偏好等,以用户体验旅程地图的形式描绘出整个度假或差旅过程中消费者与相关的服务和产品供应商,如酒店、航空公司、OTA等企业的互动,这就让所有的部门都非常清楚地看到真实的用户,他们所在的服务生态以及当前的痛点和机会点等。”

“我们实际上是充当了客户公司的产品经理加UI设计师以及用户体验检验设计师的角色。”黄峰总结道。据黄峰提供的数据,唐硕咨询50%以上都是策略、研究和设计结合在一起的项目,单纯的研究和设计项目各占25%左右。

现在,唐硕咨询开始做一些线下的零售领域的用户体验设计。黄峰觉得,金融、酒店、航空、教育等传统行业的线下零售网点都是非常强调服务的,消费者对用户体验也有很高的要求。唐硕咨询最近正在帮一个客户策划某地的一个旗舰店的客户体验设计。大到店面人员服务流程设计,小到一把椅子怎么摆放,都在唐硕咨询的服务范围内。

“一个航空公司订票网站的用户体验不错,但是你觉得立在飞机场里效率很低的那个取票机器就不需要改了吗?”在黄峰眼中,“让线上的企业和线下都传达一流的体验,并从消费者角度把体验无缝的连接起来,在合适的场景之下以合适的方式让消费者感受体贴”是公司存在的价值。

用户控件设计 篇3

关键词:.NET,XML,用户控件,树

1 概述

表示层作为应用程序的最顶层,直接负责与最终用户的交互,如接收用户录入的数据;输出(显示)程序执行的结果;响应页面触发的事件等。因此,良好的表示层设计不仅可以美化程序外观、简化界面操作、增强用户体验,而且可以提高程序开发效率,增强程序的健壮性。

设计实现了基于XML的UserTree控件[1],它以用户控件的形式实现并对VS 2005[2]中的TreeView[3]控件进行了重新封装,具有动态加载、动态更新等优点。UserTree为搭建表示层提供了生动丰富的实现选择。

2 UserTree控件的设计与实现

UserTree控件由XML描述文档和以下4个类实现:TreeDescriptor类、nodeStructure类、ParseXML类、TreeControl类。其中,XML文档用于描述一棵树及其属性;TreeDescriptor和nodeStructure是该树在内存中的对象表示;ParseXML用于解析XML,并将解析结果装填到TreeDescriptor的实例中;TreeControl是封装后的树形控件,它根据TreeDescriptor的描述信息动态地创建树并格式化该树的各个属性。下面是各类的核心实现代码:

说明:TreeDescriptor采用递归定义来描述树节点。根节点rootNodes和子节点leafNodeList的内容都是nodeStructure。

说明:ParseTreeXML从头开始解析XML描述文档,当解析到子节点时调用PaseNodeXML方法。PaseNodeXML采用递归算法解析各子节点。

说明:TreeControl以用户控件的形式实现。BuildControl遍历TreeDescriptor中的节点动态地创建树,若某节点存在子节点,则递归调用buildNodes创建子节点。action用于表示该树执行的是哪一种动作,本例中表示某节点被选中。

3 UserTree控件的使用

在工程中创建一个新的aspx页面,在页面上拖放UserTree控件和TextBox控件。同时修改页面的PageLoad事件并重载OnPreRender事件:

运行程序,对应下述XML描述文档得到的树,如图1所示。

4 讨论

可以看出,UserTree控件具有以下优点:(1)良好的封装特性。UserTree以用户控件的形式对VS 2005中的TreeView控件进行了重新封装。虽然本例中实现的功能有限,但只需简单的扩展便可以实现更加丰富的功能。(2)基于XML描述动态创建。UserTree根据XML的描述信息动态地创建树、节点并格式化树的各种属性。在实际使用过程中,只需修改XML文档即可动态地更新树及其属性。(3)良好的一致性表示。假设多个页面需要使用树形控件时,UserTree为所有页面提供了统一的表示和访问接口。对每个页面的XML描述文档进行修改,即可实现不同的表示效果;如果遇上需求变动,只需对UserTree类进行修改,而不必到每个页面进行修改。

参考文献

[1]ASP.NET XML高级编程.Chris Knowles.清华大学出版社,2002.

[2]Visual Studio2005MSDN.

用户控件设计 篇4

Delphi是Borland公司开发的可视化软件开发工具,Delphi被称为第4代编程语言,它具有简单、高效、功能强大的特点。在Delphi众多的优势当中,数据库方面的特长显得尤为突出:适应于多种数据库结构,从客户机/服务机模式到多层数据结构模式;高效率的数据库管理系统和新一代更先进的数据库引擎;最新的数据分析手段和提供大量的企业组件。

在业界,Flash被称为是“最为灵活的前台”。在所熟知的Flash应用于站点建设上,它的使用带来了各种优点;在应用程序开发方面,由于Flash其独特的跨平台特性、灵活的界面控制以及多媒体特性的使用,使得用Flash制作的应用程序具有很强的生命力,在与用户的交流方面具有其他方式都无可比拟的优势。ActionScript是用来向Flash应用程序添加交互性的语言,此类应用程序可以是简单的SWF动画文件,也可以是更复杂的功能丰富的Internet应用程序。在软件系统界面开发方面,Flash对于界面元素的可控性和它所表达的效果无疑具有很大的诱惑。对于一个软件系统的界面,Flash所具有的特性完全可以为用户提供一个良好的接口。

2 概述

在开发教务管理系统中,采用当前流行的三层体系结构,在校园外采用B/S结构设计,用户通过IE客户端访问,学校局域网环境下采用C/S结构,突破了原先教务系统使用地域的局限性,使整个校园网乃至Internet上的用户都可访问本教务系统,在开发工具上使用Delphi开发基于C/S结构的前端界面,采用B/S结构的子系统运行于IE客户端,采用ASP.NET开发,美工人员设计了基于Flash的用户进入界面,为了让C/S用户客户端界面美观,也为了保持与B/S系统初始界面一致,所以在C/S系统使用ActiveX技术调用Flash控件。

3 控件

3.1 Flash控件注册

不同于Windows标准控件,ActiveX控件需要注册才能使用,ActiveX一般以.OCX或者.DLL文件格式发布,Flash在设计时,为了方便开发人员使用,开发了一个Flash.ocx控件。在Delphi环境下,可以使用DelphiIDE提供的工具注册控件,Delphi开发工具里,选择Project(项目),选择Import Type Library…(导入类型库),打开如图1窗口,如果用户已经安装过Flash相关安装程序,则会发现Shockwave Flash已经自己注册;如果没有安装,可以直接点击“Add”,选择Flash.ocx的目录,默认如果IE浏览器安装过Flash.ocx,一般此组件放在WINDOWSsystem32MacromedFlash下有Flash.ocx,导入后,点击“Install”安装到控件面板中,如果不修改安装到哪个面板上,默认会安装到ActiveX面板上。

3.2 自动注册

系统在开发使用此控件时,可以使用此方法,将控件注册到控件面板上,然后在Delphi编译环境下调用,但在实际项目过程中,用户的机器上可能不存在Flash控件,需要程序动态注册,但在调试环境下可以使用上述方法注册控件。在后期软件安装打包上都是动态注册与卸载控件的,以避免用户机器上不存在Flash导致出现异常。以下是Flash控件动态注册的函数代码:

系统初始检查Flash控件是否注册,没有注册,调用上述函数注册此控件;如果注册直接返回,在使用完控件必要的时候还要注销(反注册)Flash控件,反注册函数跟上述类似,只是返回地址时候调用DllUnregisterServer即可。

4 用户登录界面与实现

用户登录界面是在B/S浏览器中设计的Flash界面,软件设计如图2所示,为了保持与B/S系统中登录界面一致,在Delphi控件中放一个ShockwaveFlash控件,然后窗口初始化或创建时候写上如下代码,实现Flash播放:

ShockwaveFlash1.Play;

Flash端添加两个单行输入文本并分别设置两个变量:RegUserName、RegPassword。在Login按钮上添加带参数的事件:发送消息使用Fscommand,因为后边Delphi调用时要使用FSCommand,并要取得在Flash界面下输入的用户名和密码,用户名和密码之间使用“/”隔开。

通过在fscommand设置RegUserName和RegPassword的参数传递获取用户输入的用户名和密码信息,也可以使用GetVariable函数获取两个变量的值。CheckUser是自定义的检查用户名和密码的函数。

5 结语

系统演示了项目中结合Delphi和Flash两种开发工具,在实际工作中,取得较好的效果,将Flash的画面呈现在用户面前。本应用程序在Delphi7,Flash8,WindowsXP环境下调试通过,编译并运行,可以实现预期的Flash动画播放效果。

参考文献

[1]曾益民,叶汝强.使用ActiveX控件实现对Flash电影的支持.计算机应用研用研究,2000.

[2]Delphi online Help.

用户控件设计 篇5

1 图像按钮用户控件的需求分析

用户要求的图像按钮控件要有4种不同的显示状态, 分别是正常、禁用、鼠标滑过和鼠标按下等。用户的需求是用4种不同颜色的图像表示上述4种状态。例如, 控件在正常状态下显示蓝色图像、禁用状态下显示灰色图像、鼠标滑过显示银白色图像、鼠标按下显示亮黄色图像等。下面是图像按钮用户控件的详细需求。

(1) 控件要有4种图像属性, 分别控制正常、禁用、鼠标滑过和鼠标按下等4种状态下, 控件中显示哪种图像。在此, 将以上4种属性分别称为:“正常图像属性”、“禁用图像属性”、“鼠标滑过图像属性”和“鼠标按下图像属性”。

(2) 在Visual Studio界面设计状态下, 当用户设置了控件的“正常图像属性”后, 控件中会立即显示属性中设置的图像。

(3) 系统启动后, 初始界面中控件以正常状态显示, 其界面上显示“正常图像属性”中设置的图像。

(4) 当鼠标箭头滑入控件内部时, 控件中的图像会切换成“鼠标滑过图像属性”中设置的图像。

(5) 当鼠标滑出控件时, 控件中的图像再次切换成正常状态下的图像。

(6) 在控件内部, 当鼠标第一次按下时, 控件中的图像切换成“鼠标按下图像属性”中设置的图像。当鼠标第二次按下时, 控件切换成正常状态显示。

(7) 当控件以鼠标按下状态显示的时候, 无论鼠标滑进滑出都以鼠标按下状态显示。

(8) 当控件不可用的时候, 控件中的图像为“禁用图像属性”中设置的图像, 无论鼠标滑进滑出都以禁用状态显示。

(9) 控件支持单击事件。

2 设计与实现

对用户需求以及现有系统控件进行分析后, 图像按钮用户控件采用了在Picture Box控件基础上设计的方案。具体为在项目中添加“用户控件”, 在用户控件的设计界面中加入Picture Box控件, 并设置其大小与用户控件界面大小相同。

2.1 属性的设计与实现

根据需求, 为图像按钮用户控件设计了5个属性, 分别是Back Image、Disable Image、Move Image、Down Image和Flag等。其中, Back Image对应“正常图像属性”, Disable Image对应“禁用图像属性”, Move Image对应“鼠标滑过图像属性”, Down Image对应“鼠标按下图像属性”, Flag用于判断用户是否单击了按钮, 程序中通过判断Flag, 决定鼠标离开控件后显示“鼠标按下图像”还是“正常图像”。上述属性中, 前4个为Image类型的属性, Flag为布尔类型的属性。

2.2 方法的设计与实现

实现图像按钮用户控件的主要方法有:User Control1_Load、picture Box1_Mouse Down、picture Box1_Mouse Enter、pictureBox1_Mouse Leave和set Normal等5个方法。

(1) User Control1_Load:该方法用于设置控件所在窗体加载时, 控件中显示哪种默认图像。具体代码如下所示:

(2) picture Box1_Mouse Down:该方法用于鼠标在控件上按下时, 指定显示哪个图像。当控件第一次被按下时, 由于Flag的初始值为false, 所以显示“鼠标按下图像”, 同时将Flag设置为true。而当第二次被按下时, 由于Flag的值为true, 所以图像切换为“正常图像”。具体代码如下所示:

(3) picture Box1_Mouse Enter:该方法用于鼠标进入控件内部时, 指定显示哪个图像 (如果控件没有被按下, 则显示Move Image指定的图像) 。具体代码如下所示:

(4) picture Box1_Mouse Leave:该方法用于鼠标移出控件内部时, 指定显示哪个图像。具体代码如下所示:

else this.picture Box1.Image=Back Image;

(5) set Normal:由于在应用系统的界面设计中, 通常都会加入多个本文设计的图像按钮用户控件, 而这些控件中只能有一个显示“鼠标按下图像”, 其他则要显示“正常图像”。因此, 在应用系统中, 必须能够调用某种方法使得用户控件上显示“正常图像”。set Normal方法正是起到上述作用的方法, 其代码如下所示:

2.3 事件的设计与实现

根据需求, 图像按钮用户控件要能够支持单击事件, 所以笔者设计了On Click事件。当用户在应用系统中单击用户控件时, 将触发On Click事件。由于用户控件被Picture Box整个覆盖着, 单击用户控件其实就是在单击Picture Box, 所以在Picture Box的单击事件中调用On Click事件即可实现在应用系统中单击用户控件时触发On Click事件的目的。具体代码如下所示:

3 用户控件的应用

如果要在应用系统中使用用户控件, 则必须先将该用户控件生成为可用的dll文件。具体方法为:在“解决方案资源管理器”中, 右击项目名称, 从弹出菜单中选择“生成”菜单项。之后, 便可以在项目的Debug文件夹中找到用户控件的dll文件。

在生成了可用的dll文件后, 就可以在应用系统中使用上面设计的用户控件了, 具体放法如下所示。

(1) 右击“工具箱”, 从弹出菜单中选择“选择项”, 打开“选择工具箱项”对话框。

(2) 在“选择工具箱项”对话框中, 选择“浏览”按钮, 并找到用户控件对应的dll文件将其打开。

(3) 单击“选择工具箱项”对话框中的“确定”按钮。此时, 工具箱中就会多出一个名称为User Control1的控件。

(4) 将该控件拖入设计器中, 设置其属性即可像其他标准控件一样使用该用户控件。

结束语

该图像按钮用户控件以Picture Box控件为基础进行了设计, 为其设置了4个新属性, 一个新事件, 并编写了相应的方法。经过在多个进销存软件系统中使用, 该控件运行稳定, 且非常实用。通常该控件并不单独使用, 而是一组一组的使用, 所以在其基础上可以进一步设计出相应的组控件, 提高其应用性, 比如, Visual Studio中的Check Box控件对应有Checked List Box控件。

参考文献

[1]使用Visual C#创作复合控件[DB/OL].http://msdn.microsoft.com/zh-cn/library/a6h7e207 (v=vs.100) .aspx.2010.[1]使用Visual C#创作复合控件[DB/OL].http://msdn.microsoft.com/zh-cn/library/a6h7e207 (v=vs.100) .aspx.2010.

[2]使用Visual C#从Windows窗体控件继承[DB/OL].http://msdn.microsoft.com/zh-cn/library/5h0k2e6x (v=vs.100) .aspx.2010.[2]使用Visual C#从Windows窗体控件继承[DB/OL].http://msdn.microsoft.com/zh-cn/library/5h0k2e6x (v=vs.100) .aspx.2010.

文本表格控件设计及应用 篇6

随着社会信息化程度不断提高,各行各业都离不开管理信息系统,而在管理信息系统中经常要输出与申请表相似的表中数据。当输出此类表中数据时面临着下面问题:(1)如何把表格中数据按我们平时的习惯进行输出?(2)一个表有多页怎么输出它们?解决这些问题,最好是用输出控件来完成,如果用大量的像Lable、TextBox等基本控件来输出表格中数据,安排设置和编程的工作量都很大,而且美观方面也很难保证。

到现在为止,还没有较好的输出文本表格数据的控件,像国外的报表开发工具如Visual Studio.NET中的RDLC、FormulaOne、CrystalReport、BRIO、StyleReport 等等,根本不能满足我们的需求;国内众多厂商开发出了具有中国特色的报表软件,如用友华表的Cell、润乾报表、数巨报表、杰表等等,一般也是针对数值型数据开发的报表软件,对完成数值型数据的表格处理功能强大,对文本表格数据的输出功能不够。

为了解决文本表格数据输出的问题,在吸收国内外数据报表控件优点的基础上,设计了此文本表格数据输出控件。此控件是Excel型数据输出控件,具有报表工具的一般特点,除此之外控件与现有的报表开发工具和一些数据控件相比进行了如下改进和创新:

1) 以记录(一条完整的信息)为单位进行输出,每条记录数据可以输出为一页或几页;

2) 可以根据我们的习惯任意设置、合并单元格,只要需要都可完成;

3) 控件每一行中列可以任意设置,不存在列合并的问题,多行的单元格可以进行行合并;

4) 输出的数据可以是数据源中的字段名、字段值或任意其他数据常量;

5) 可以对数据进行编辑,方便对数据进行修改;

6) 对多页的数据,可以进行分页显示,并给出页码标签用于翻页,方便浏览;

7) 对多条记录提供了移动记录方法,即移到第一条、前一条、下一条和最后一条;

8) 所有设置全部可以使用属性窗口完成,可以不编写任何代码,方便使用;

9) 所有设置皆沿用Windows下的设置格式,符合应用习惯。

1算法及实现

从整体框架看,设置控件的数据源(DataSource)和数据成员(DataMember)等属性,然后设置行集和列集属性,最后根据前面的设置输出文本表格,如果超出一页,多页输出,如果需要,可以对数据进行修改。下面对部分算法进行一些说明。

1.1数据源和数据成员属性

在信息管理系统中,数据常被存放在数据库如SQL Sverver和Excel文件中,为了方便在控件中输出和修改数据,为控件设计了数据源和数据成员属性。

数据源和数据成员属性为控件设置输出的数据,把设置给数据源的数据保存到数据集DataSet中;再根据设置给数据成员的数据表名把数据表中数据保存到数据表DataTable中,以备设置各单元格的数据使用。

数据源属性的set访问器的流程如图1所示。

1.2合并单元格输出

控件中不论每行的列数是否相等,每列的宽度是否相同,单元格排列都可以看作是规则的,只有占用多行的单元格是不规则的,需要对它进行特殊的处理,即单元格合并。为了处理合并单元格,设计了一个行合并结构(rowCombinationInformation)来保存合并单元格的开始位置信息;由于表格中同时可能有多个合并单元格存在,需要定义多个行合并结构变量,为了便于管理和处理这些行合并结构变量,定义一个ArrayList类对象用来保存它们。

当输出文本表格遇到单元格“行合并”属性为false时,直接为此单元格画线和输出数据即可。

当输出文本表格遇到第一个单元格的“行合并”属性为true(开始合并单元格)时,创建一个行合并结构变量,把行合并的开始信息保存起来,并添加到ArrayList类对象中;当遇到此合并单元格的最后原单元格的“行合并”属性为false(即合并单元格结束)时,把保存在ArrayList类对象中的行合并结构取出,与此原单元格联合输出合并单元格及数据,并把此行合并结构从ArrayList类对象中清除。步骤如下:

(1) 定义行合并信息(rowCombinationInformation)结构。

private struct rowCombinationInformation

{

public int rowStart; //开始行数

public int columnStart; //开始列数

public float rowColumnStart; //合并单元格的列开始位置

}

(2) 定义一个ArrayList类对象myArrayList。

(3) 保存合并单元格信息。当输出文本表格遇到第一个单元格的“行合并”属性为true时,处理合并单元格信息的流程如图2所示。通过循环判断myArrayList对象中各rowCombinationInformation结构元素的rowColumnStart 和当前rowColumnWidth[i, j]的值是否相同,如果相同说明与上面是同一合并单元格,否则是新的合并行,新建rowCombinationInformation结构变量,保存开始行到rowStart,保存开始列到columnStart,保存此行的列开始位置到rowColumnStart,最后把rowCombinationInformation结构对象添加到myArrayList中。

(4) 输出合并单元格信息。当输出文本表格遇到单元格的“行合并”属性为false时,输出单元格及数据流程如图3所示。通过循环判断myArrayList数组中各rowCombinationInformation结构元素的rci.rowColumnStart 是否与rowColumnWidth[i, j] 相同,如果相同说明此合并单元格结束,要输出此合并单元格及数据,首先把此rowCombinationInformation结构元素从myArrayList中读出,然后从myArrayList数组中把rowCombinationInformation结构元素清除,最后以此rowCombinationInformation结构保存的信息确定的左上角和当前行列的数据确定输出的范围显示合并单元格及数据。

1.3多页显示

申请表之类的文本表格大部分时候都有多页,那就需要多页显示。由于输出表格时每行的行高是任意的,所以多页显示时不能以第一页输出的行数为基准,要以第一页的高度为基准,其他页的高度不能高于第一页,所以定义了两个数组showRowNumber和showHeigt分别用来保存每页显示的行数和每页显示的总高度。

计算页数时,根据控件首页显示行数计算控件的其他页行数和高度,如果出现少一行页的高度不够,多一行页的高度太大时,以少一行的高度为准,然后把每页的行数和高度存放到数组中;输出控件时,根据当前选定的页数和数组中保存此页的行数和高度,把数据和单元格线画到窗体上。为了方便多页浏览任何一页,在输出数据表格的下面添加了与页数对应的多个页码键按钮。

1.4数据修改

为了方便对数据进行添加、修改,控件设置了对数据库中数据修改的功能。对字段名的修改直接修改数据库中表结构为好,不在此修改范围。

设计思路和方法:

(1) 为控件添加了一个隐藏的多行文本框控件。

(2) 设计控件的MouseDoubleClick事件,当在控件上双击鼠标时,在此单元格中显示隐藏文本框,并把当前单元格数据设置给文本框,这时就可以对文本框内容进行编辑。

(3) 设计文本框控件的KeyPress事件,当遇到“ESC”时放弃编辑,隐藏文本框控件;当遇到回车键时,把数据保存到数据库,显示到控件上,并隐藏文本框控件。

1.5行、列集合属性编辑器

在控件的所有属性中,集合属性是比较复杂的属性,也是功能最强的属性之一,集合属性有它自己的编辑器,即集合属性编辑器。本控件的使用主要通过行集和列集进行设置的,行集和列集是此控件最重要的属性,为了方便对行集和列集的设置,为控件中的行集属性和列集属性设计了集合属性编辑器,行集的属性编辑器如图4所示,列集的属性编辑器如图5所示。

集合属性编辑器的设计思路和方法:

(1) 设计集合属性

使用DesignerSerializationVisibility类来控制在设计时序列化集合的方式。指定属性对设计时序列化程序所具有的可见性。对您的集合属性应用 Content 值可确保对此属性的序列化,且把属性设置为只读属性。如行集属性设计如下:

(2) 设计集合项类

根据类的功能设计一个一般的类即可。如设计一个Row(行)类。

(3) 设计编辑器类

设计编辑器类要继承CollectionEditor类,CollectionEditor类提供一个用户界面,该界面可以在设计时编辑大多数类型的集合。在此类中最主要的是重写CreateInstance方法,它的功能是创建指定的集合项类型的新实例,即当创建实例为行时,创建新行并返回它。

(4)设计集合类,并设置它的编辑器为前面设计的编辑类

集合类首先要继承Collection<T>类,Collection<T>类为泛型集合提供基类,并且要用下面语句指定集合类的编辑器[Editor(typeof(RowCollectionEditor), typeof(UITypeEditor))]。

[Editor(typeof(RowCollectionEditor), typeof(UITypeEditor))] //指定编辑器

public class RowCollection:Collection<Row>

{}

集合类的内容主要是添加一些常用属性和方法如:count属性、Add、Clear、ReMove等方法和创建索引。

2控件的应用

下面以输出“优秀毕业设计(论文)推荐表”的WinForm应用程序中此控件应用为例说明它的具体用法。

步骤:

(1) 用工具菜单中的添加/移除工具箱项……菜单项把NewExTableCtrl控件加入工具箱,然后把它加入窗体中,控件空表格默认外观如图6所示。

(2) 设置控件的属性如表1所示。

(3) 添加移动记录的四个按钮。

(4) 运行设置好的控件,运行结果如图7和图8所示。

(5) 在单元格中双击鼠标左键,出现文本编辑框,对数据进行编辑,运行结果如图9所示。

(6) 按回车或“ESC”键结束编辑回到查看状态。

3结语

文本表格在工作中用得很多,要想在管理信息系统中较好地使用它们,必须有合适的控件输出编辑它们。本文为了满足这方面的需求,设计了文本表格控件,使用此控件能够满足我们平时对文本表格显示的需要,符合我们平时的应用习惯,可大大提高输出文本表格的能力。

参考文献

[1]王瑾,张璟,李军怀.报表展示引擎设计与实现[J].微电子学与计算机,2009(5).

[2]孙伟,魏雪峰.报表的规范输出模型及算法研究[J].计算机工程与设计,2006(10).

[3]冯家祥.面向程序开发人员的通用报表工具的研究[J].福建电脑,2010(8).

[4]郑键.庖丁解牛纵向切入ASP.NET3.5控件和组件开发技术[M].北京:电子工业出版社,2009.

[5]沃其尔.Web Parts与自定义控件高级编程(ASP.NET2.0版)[M].张建伟,王建东,译.北京:清华大学出版社,2006.

注:本文为网友上传,旨在传播知识,不代表本站观点,与本站立场无关。若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:66553826@qq.com

上一篇:ActiveX控件 下一篇:结肠癌患者