您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 国内外标准规范 > C# WinForm中的界面开发大全
WinForm界面开发之模块化分合本文继续WInform界面开发系列的介绍,主要针对性介绍Winform开发过程中,经常用到的模块:数据字典模块、参数配置模块、权限管理模块的模块化应用,以及各模块的分合之道。1、数据字典模块我们知道,一般程序基本上都涉及到了一个是数据参考用途的数据字典模块,不管是Web还是Winform的,这个模块基本上是必不可少的,Winform的界面效果大致如下所示:本模块的数据字典支持无限级树形分层应用,可以添加大类,字典项目等数据,系统集成只需要拷贝相关的字典表即可实现集成。2、参数配置模块在程序中,一般应用就是通过代码把相关的内容进行转义保存或者解析,以便呈现给用户更好的数据展示效果,这个模块比较通用,可分可合。另外一个也比较常用的就是参数的配置管理模块,一般如果参数比较少,直接使用.NET的配置保存功能即可,如下图所示。但这种方式只能保存比较少的内容,对于比较复杂的配置,一般很少采用这种模式存放程序的参数信息,这种方式存储的参数,如果不是放到一个独立的文件中,还存在一个不同步的现象。其实我们还是可以把参数的配置功能作为一个独立的模块进行处理,我的程序就是经常这么干的,而且由于是相对比较独立,并在设计时候就支持参数的编辑及展示功能,因此效率大大提高,对使用用户来说,由于修改界面比较统一,而且参数的说明等很丰富,因此用户修改系统的配置参数友好性大大增强,界面效果如下所示:使用用户看到的参数配置界面效果:开发者在设计时刻的参数配置界面如下所示:这些参数最终目的是为了程序的读取和调用,调用代码非常简单,而且由于是强类型的属性以及良好的提示功能,应该是比较方便的,示例代码如下所示:代码doublehours=span.Hours;hours=(hoursSystemConfig.Default.KFPartAtLeaseHoure)?SystemConfig.Default.KFPartAtLeaseHoure:hours;//最小的钟点房计费if(span.Minutes60&&span.Minutes=SystemConfig.Default.KFPartHourMinutes){hours+=1;}elseif(span.MinutesSystemConfig.Default.KFPartHalfHourMinte&&span.MinutesSystemConfig.Default.KFPartHourMinutes){hours+=0.5;}其中的SystemConfig.Default.KFPartAtLeaseHoure就是参数的名称了,根据这个名称就可以读取和设置该参数的值。该参数配置模块是一个VisualStudio的Addin插件,因此可以在设计时刻提供参数的添加、修改、删除等支持,非常方便,而且也能在发布后给用户界面提供修改,是一个独立的模块。3、权限管理模块最后说说第三个模块,权限管理模块,我们知道,一般对于进销存或者稍微复杂一点的系统,都需要最基本的权限控制模块,以便控制不同用户的访问功能,这个可以做成独立的应用程序进行管理,如下图所示:程序是一个独立的程序,但是权限系统需要和业务应用系统结合一起才有价值,因此它们之间的结合,一个除了数据库的整合(把权限系统需要的表整合一起),还需要在系统的代码中进行整合(实现功能模块的登陆及权限控制等)。登陆验证如下所示:try{stringloginName=this.cmbzhanhao.Text.Trim();UseruserBLL=newUser();stringidentity=userBLL.VerifyUser(loginName,this.tbPass.Text,Guid.NewGuid().ToString());if(!string.IsNullOrEmpty(identity)){UserInfoinfo=userBLL.GetUserByName(loginName);#region获取用户的功能列表FunctionfunctionBLL=newFunction();ListFunctionInfolist=functionBLL.GetFunctionsByUser(info.ID,HOTELMS);if(list!=null&&list.Count0){foreach(FunctionInfofunctionInfoinlist){if(!Portal.gc.FunctionDict.ContainsKey(functionInfo.ControlID)){Portal.gc.FunctionDict.Add(functionInfo.ControlID,functionInfo);}}}#endregionbLogin=true;Portal.gc.LoginInfo=info;this.DialogResult=DialogResult.OK;}else{MessageUtil.ShowTips(用户帐号密码不正确);this.tbPass.Text=;//设置密码为空}}catch(Exceptionerr){MessageUtil.ShowError(err.Message);}用户功能权限认证如下所示:#regionKTV包间管理if(Portal.gc.HasFunction(KTV)){OutlookBarBandmyBasicBand=newOutlookBarBand(KTV包间管理);myBasicBand.SmallImageList=this.imageList;myBasicBand.LargeImageList=this.imageList;if(Portal.gc.HasFunction(KTV/View)){myBasicBand.Items.Add(newOutlookBarItem(KTV包间状态视图,0));}if(Portal.gc.HasFunction(KTV/Setting)){myBasicBand.Items.Add(newOutlookBarItem(KTV包间设置,1));}if(Portal.gc.HasFunction(KTV/Goods)){myBasicBand.Items.Add(newOutlookBarItem(KTV商品设置,3));}if(Portal.gc.HasFunction(KTV/Waiter)){myBasicBand.Items.Add(newOutlookBarItem(KTV服务生管理,4));}if(Portal.gc.HasFunction(KTV/BookIn)){myBasicBand.Items.Add(newOutlookBarItem(KTV预订管理,5));}if(Portal.gc.HasFunction(KTV/OtherIncome)){myBasicBand.Items.Add(newOutlookBarItem(KTV其他款项登记,6));}myBasicBand.Background=SystemColors.AppWorkspace;myBasicBand.TextColor=Color.White;outlookBar1.Bands.Add(myBasicBand);}#endregion至此,三个常用而且比较独立模块介绍完毕,这几种场景你用了几个呢,如果觉得有价值,欢迎一起讨论切磋。开发之道,顺手拈来;分合之需,顺其自然;优码不语,润物无声;winform复选框控件赋值的小技巧Postedon2010-02-0716:36伍华聪阅读(1909)评论(5)编辑收藏前几天,有一位园友写了一篇不错的文章《WinForm清空界面控件值的小技巧》,文章里面介绍了怎么清空界面各个控件值的一个好技巧,这个方法确实是不错的,在繁杂的界面控件值清理中,可谓省时省力。本人在开发Winform程序中,也有一个类似的小技巧,不是清空控件值,而是赋值,给复选框赋值和获取值的小技巧,分享讨论一下。应用场景是这样的,如果你有一些需要使用复选框来呈现内容的时候,如下面两图所示:以上的切除部分的内容,是采用在GroupBox中放置多个CheckBox的方式;其实这个部分也可以使用Winform控件种的CheckedListBox控件来呈现内容。如下所示。不管采用那种控件,我们都会涉及到为它赋值的麻烦,我这里封装了一个函数,可以很简单的给控件赋值,大致代码如下。CheckBoxListUtil.SetCheck(this.groupRemove,info.切除程度);那么取控件的内容代码是如何的呢,代码如下:info.切除程度=CheckBoxListUtil.GetCheckedItems(this.groupRemove);赋值和取值通过封装函数调用,都非常简单,也可以重复利用,封装方法函数如下所示。代码publicclassCheckBoxListUtil{///summary///如果值列表中有的,根据内容勾选GroupBox里面的成员.////summary///paramname=group包含CheckBox控件组的GroupBox控件/param///paramname=valueList逗号分隔的值列表/parampublicstaticvoidSetCheck(GroupBoxgroup,stringvalueList){string[]strtemp=valueList.Split(',');foreach(stringstrinstrtemp){foreach(Controlcontrolingroup.Controls){CheckBoxchk=controlasCheckBox;if(chk!=null&&chk.Text==str){chk.Checked=true;}}}}///summary///获取GroupBox控件成员勾选的值////summary///paramname=group包含CheckBox控件组的GroupBox控件/param///returns返回逗号分隔的值列表/returnspublicstaticstringGetCheckedItems(GroupBoxgroup){stringresultList=;foreach(Controlcontrolingroup.Controls){CheckBoxchk=controlasCheckBox;if(chk!=null&&chk.Checked){resultList+=string.Format({0},,chk.Text);}}returnresultList.Trim(',');}///summary///如果值列表中有的,根据内容勾选CheckedListBox的成员.////summary///paramname=cblItemsCheckedListBox控件/param///paramname=valueList逗号分隔的值列表/parampublicstaticvoidSetCheck(CheckedListBoxcblItems,stringvalueList){string[]strtemp=valueList.Split(',');foreach(stringstrinstrtemp){for(inti=0;icblItems.Items.Count;i++){if(cblItems.GetItemText(cblItems.Items[i])==str){cblItems.SetItemChecked(i,true);}}}}///summary///获取CheckedListBox控件成员勾选的值////summary///paramname=cblItemsCheckedList
本文标题:C# WinForm中的界面开发大全
链接地址:https://www.777doc.com/doc-3630844 .html