首页 > 代码库 > 二十五、【开源】EFW框架Winform前端开发之强大的自定义控件库
二十五、【开源】EFW框架Winform前端开发之强大的自定义控件库
回《【开源】EFW框架系列文章索引》
EFW框架源代码下载V1.2:http://pan.baidu.com/s/1hcnuA
EFW框架实例源代码下载:http://pan.baidu.com/s/1o6MAKCa
前言:相比以前现在做Net系统Winform版开发有几款不错的控件,如DotNetBar、DevExpress,EFW框架也不能落后加入了DotNetBar控件,有时间也想把DevExpress控件也整合进来,这样让大家又多一个选择;DotNetBar中的控件确实已经够强大了,但是为了满足客户更好的操作体验,自己又在DotNetBar控件的基础上开发了一套强大的自定义控件;现在用这套控件基本上可以解决在项目中遇到的各种界面需求;DotNetBar控件的使用这里就不讲了,没用过的可以参考官网的Demo,本章重点讲解一下自己开发的自定义控件;自定义控件共有9个,包括复杂表格控件、多选文本框、弹出面板、数据表单等控件;
本文要点强大的自定义控件:
1.网格控件(DataGrid)
2.网格内带下拉网格数据录入控件(GridBoxCard)
3.文本框带下拉网格控件(TextBoxCard)
4.多选文本框控件(MultiSelectText)
5.起止时间查询控件(StatDateTime)
6.年龄控件(AgeText)
7.分页工具栏控件(Pager)
8.分页工具栏控件(Pager)
9.数据表单控件(frmForm)
使用DotNetBar控件开发的主界面:
自己开发的强大自定义控件效果图:
源代码目录结构:
1.网格控件(DataGrid)
DataGrid继承与DevComponents.DotNetBar.Controls.DataGridViewX控件,控件每行前面可以显示行号,还封装一些快速设置网格样式的方法;
1)控件属性
名称 | 类型 | 说明 | 默认值 |
AllowSortWhenClickColumnHeader | bool | 获取或设置是否允许点击ColumnHeader排序 | true |
SeqVisible | bool | 获取或设置是否显示行序号 | true |
2)控件事件
3)控件方法
名称 | 参数 | 说明 |
DrawLines | List<DataGridViewDrawLineInfo> Lines | 在指定的位置划线 |
AddLine | DataGridViewDrawLineInfo Line | 增加一个线条对象 |
RemoveLine | DataGridViewDrawLineInfo Line | 移除一个线条对象 |
ClearLines | 清除所有线条 | |
SetRowColor | 设置行颜色 |
4)使用实例
从拖工具栏拖一个DataGrid控件,给网格内容画一条分组线与设置行颜色。
List<DataGridViewDrawLineInfo> list=new List<DataGridViewDrawLineInfo>(); DataGridViewDrawLineInfo lineInfo=new DataGridViewDrawLineInfo(); lineInfo.StartIndexOfRowColumn=0; lineInfo.EndIndexOfRowColumn=1; lineInfo.DrawLineOfRowColumnIndex=0; lineInfo.DrawDirection=Direction.TopToButtom; lineInfo.Width=1; lineInfo.Color=Color.Red; list.Add(lineInfo); //画分组线 this.dataGrid1.DrawLines(list); this.dataGrid1.SetRowColor(1, Color.Yellow, false);
2.网格内带下拉网格数据录入控件(GridBoxCard)
GridBoxCard继承与DataGrid控件,控件指定列绑定下拉网格,这样方便直接在网格中录入数据,下拉网格数据源支持分页;
1) 控件属性
名称 | 类型 | 说明 | 默认值 |
HideSelectionCardWhenCustomInput | bool | 当自定输入的时候是否隐藏选项卡 | false |
SelectionCards | DataGridViewSelectionCard[] | 获取或设置网格选项卡 | null |
SelectionNumKeyBoards | DataGridViewSelectionNumericKeyBoard[] | 获取或设置数字键盘选项卡 | null |
IsShowLetter | bool | 是否显示过滤字母 | false |
IsShowPage | bool | 是否显示分页条 | false |
IsInputNumSelectedCard | bool | 是否输入数字选定 | true |
DataGridViewSelectionCard属性 | |||
名称 | 类型 | 说明 | 默认值 |
CardColumn | string | 选项卡列信息,如:Code|编码|80,Name|名称|120 | false |
DataSource | DataTable | 选项数据源 | null |
CardSize | Size | 选项卡大小,设置int width, int height | null |
QueryFieldsString | string | 设置查询字段,通过“,”分割 | false |
SelectCardFilterType | MatchModes | 选项卡记录过滤方式,包括ByAnyString任意字符、ByFirstChar按首字符 | false |
BindColumnIndex | int | 获取或设置选项卡要绑定到的列的索引 | true |
IsPage | bool | 设置是否内部分页,IsPage=false时结合PagerEventHandler事件使用 | |
PageTotalRecord | int | 总记录数 IsPage=false时才使用 | |
Memo | string | 选项卡备注说明 |
2) 控件事件
名称 | 参数 | 说明 |
PageNoChanged | PagerGridEventHandler(object sender, int index, int pageNo, int pageSize, string fiterChar) | 翻页的事件,结合DataGridViewSelectionCard属性的IsPage=false属性使用 |
SelectCardRowSelected | OnSelectCardRowSelectedHandle(object SelectedValue, ref bool stop, ref int customNextColumnIndex) | 用户选定选择卡记录后触发 |
UserAddGirdRow | UserAddGirdRowHandler(DataRow dataRow) | 用户新增一行记录时触发 |
DataGridViewCellPressEnterKey | OnDataGridViewCellPressEnterKeyHandle(object sender, int colIndex, int rowIndex, ref bool jumpStop) | 用户在单元格回车键 |
3) 控件方法
名称 | 参数 | 说明 |
AddRow | 给Gird新增一行 | |
BindSelectionCardDataSource | int index, DataTable DataSource | 绑定选项卡数据源,index指定对应选项卡索引,DataSource数据源 |
4) 使用实例
从拖工具栏拖一个GridBoxCard控件,给网格设置选项卡并绑定数据源。
1.给表格和弹出表格绑定数据源
this.gridBoxCard1.DataSource = dt.Clone();this.gridBoxCard1.BindSelectionCardDataSource(0, dt.Copy());this.gridBoxCard1.AddRow();
2.选定记录是响应的事件
private void gridBoxCard1_SelectCardRowSelected(object SelectedValue, ref bool stop, ref int customNextColumnIndex) { DataTable dt = (DataTable)this.gridBoxCard1.DataSource; int rowindex = gridBoxCard1.CurrentCell.RowIndex; dt.Rows[rowindex]["code"] = ((DataRow)SelectedValue)["code"]; dt.Rows[rowindex]["name"] = ((DataRow)SelectedValue)["name"]; }
3.文本框带下拉网格控件(TextBoxCard)
TextBoxCard继承与DevComponents.DotNetBar.Controls.TextBoxX控件,控件绑定下拉网格,且下拉网格数据源支持分页,普通的下拉控件只有一列数据,而此控件的下拉列可以自定义多个列;
1) 控件属性
名称 | 类型 | 说明 | 默认值 |
ShowCardDataSource | DataTable | 下拉网格绑定数据源 | true |
CardColumn | string | 选项卡列信息,如:Code|编码|80,Name|名称|120 | true |
matchMode | MatchModes | 选项卡记录过滤方式,包括ByAnyString任意字符、ByFirstChar按首字符 | |
QueryFieldsString | string | 设置查询字段,通过“,”分割 | |
DisplayField | string | 显示字段 | |
MemberField | string | 值字段 | |
SelectedValue | object | 获取或设置选中的值 | |
ShowCardWidth | int | 设置下拉框的宽度 | 0 |
ShowCardHeight | int | 设置下拉框的高度 | 0 |
IsShowLetter | bool | 是否显示过滤字母 | false |
IsShowPage | bool | 是否显示分页条 | false |
IsPage | bool | 设置是否内部分页,IsPage=false时结合PagerEventHandler事件使用 | true |
IsShowSeq | bool | 是否显示下拉行序号 | true |
IsNumSelected | bool | 是否输入数字选定 | true |
IsEnterShowCard | bool | 是否焦点进入就显示内容 | false |
2) 控件事件
名称 | 参数 | 说明 |
AfterSelectedRow | 在选项卡选定记录后引发的事件 | |
PageNoChanged | 翻页的事件,结合IsPage=false属性使用 |
3) 控件方法
名称 | 参数 | 说明 |
HideCard | 隐藏下拉网格 |
4) 使用实例
从拖工具栏拖一个TextBoxCard控件,并绑定数据源。
this.textBoxCard1.ShowCardDataSource = dt.Copy();
4.多选文本框控件(MultiSelectText)
MultiselectText是一个用户控件,依赖Popup控件和DataGrid控件,控件支持两种多选模式,一是CheckBox复选,二是Grid查找勾选;数据源不多的情况下建议CheckBox模式;
1) 控件属性
名称 | 类型 | 说明 | 默认值 |
SelectText | string | 获取多选文本 | |
SelectValue | Object[] | 获取或设置多选的值 | |
DataSource | object | 多选下拉数据源 | |
displayField | string | 显示字段 | |
valueField | string | 值字段 | |
multiSelectTextType | MultiSelectTextType | 多选类型,CheckBox和Grid | |
selectWidth | int | 多选面板的宽度 | |
selectHeight | int | 多选面板的高度 | |
selectColumnCount | int | 如果是CheckBox模式,设置显示几列 | |
CardColumn | string | 列信息,如:Code|编码|80,Name|名称|120 | |
QueryFieldsString | string | 设置查询字段,通过“,”分割 | |
2) 控件事件
名称 | 参数 | 说明 |
SelectValueChanged | 选中值改变触发此事件 | |
3) 控件方法
名称 | 参数 | 说明 |
AddValue | object val | 代码增加值 |
ClearValue | 清除所有值 |
4) 使用实例
从拖工具栏拖一个MultiSelectText控件,并绑定数据源。
this.multiSelectText2.DataSource = dt.Copy();
5.起止时间查询控件(StatDateTime)
StatDateTime是一个用户控件依赖于Popup控件,控件包含了多种选项,快速录入起止时间;
1) 控件属性
名称 | 类型 | 说明 | 默认值 |
AgeBirthday | DateTime | 获取或设置出生日期 | |
AgeString | string | 获取或设置年龄 |
2) 控件事件
3) 控件方法
4) 使用实例
从拖工具栏拖一个StatDateTime控件。
6.年龄控件(AgeText)
AgeText是一个用户控件依赖于Popup控件,控件会自动在出生日期与年龄相互转换;
1) 控件属性
名称 | 类型 | 说明 | 默认值 |
AllowSortWhenClickColumnHeader | bool | 获取或设置是否允许点击ColumnHeader排序 | true |
SeqVisible | bool | 获取或设置是否显示行序号 | true |
2) 控件事件
3) 控件方法
名称 | 参数 | 说明 |
DrawLines | List<DataGridViewDrawLineInfo> Lines | 在指定的位置划线 |
4) 使用实例
从拖工具栏拖一个AgeText控件。
7.分页工具栏控件(Pager)
Pager分页控件,可以与DataGrid控件一起使用;
1) 控件属性
名称 | 类型 | 说明 | 默认值 |
BindDataControl | DataGridView | 绑定数据控件 | null |
DataSource | DataTable | 绑定数据源 | null |
IsPage | bool | 设置是否内部分页,IsPage=false时结合PagerEventHandler事件使用 | true |
pageSize | int | 每页显示条数 | 10 |
pageNo | int | 当前第几页 | 1 |
totalRecord | int | 共记录数 | 0 |
2) 控件事件
名称 | 参数 | 说明 |
PageNoChanged | PagerEventHandler | 翻页的事件,结合IsPage=false属性使用 |
3) 控件方法
4) 使用实例
从拖工具栏拖一个Pager控件。
8.弹出面板控件(Popup)
Popup弹出面板控件,在Winform开发中过多增加弹出窗会影响操作体验,使用此控件来设计界面会让界面更简洁明了;除了点击标题上的红叉可以隐藏弹窗,点击界面的任何位置也会隐藏弹窗;
1) 控件属性
2) 控件事件
名称 | 参数 | 说明 |
doShow | 弹出面板显示时触发此事件 | |
doHide | 弹出面板隐藏时触发此事件 |
3) 控件方法
名称 | 参数 | 说明 |
AddPopupPanel | 绑定弹出面板Panel控件 | |
AddPopupWindow | 绑定弹出面板Winform界面 | |
Show | 以面板形式显示 | |
ShowWindow | 以窗体形式显示 |
4) 使用实例
从拖工具栏拖一个Popup控件,绑定弹出的面板控件。
popup1.ShowWindow(this, new Form2(), 200, 180, GreatHIS.Controls.CommonControl.WindowStyle.Task,"【测试】"); popup1.AddPopupPanel(button1, new Form1(), PopupEvent.Click, button1.Width, 120);
9.数据表单控件(frmForm)
frmForm数据表单控件,让你获取界面上控件的值或赋值个控件像web网页中的form一样简单,支持回车焦点按顺序跳转,支持验证绑定控件录入值有效性;
1) 控件属性
名称 | 类型 | 说明 | 默认值 |
IsSkip | bool | 设置是否焦点按顺序跳转 | true |
2) 控件事件
3) 控件方法
名称 | 参数 | 说明 |
AddItem | 添加界面控件 | |
Load | 将数据导入到绑定控件显示 | |
GetValue | 获取绑定控件的值集合 | |
Clear | 清空绑定控件的值 | |
SetEnabled | 设置绑定控件是否可操作 | |
Validate | 验证绑定控制的值有效性,如Text不能为空,身份证号码验证等 |
4) 使用实例
从拖工具栏拖一个frmForm控件,并绑定界面上的输入控件。
第一步:在窗体构造函数绑定控件
this.frmForm1.AddItem(txtUser, null, "请输入用户名!");this.frmForm1.AddItem(txtPassWord, null, "请输入密码!");
第二步:操作frmForm控件进行里面绑定控件的数据验证、取值、赋值
if (this.frmForm1.Validate()){InvokeController("UserLogin");isReLogin=true;this.Close();}
二十五、【开源】EFW框架Winform前端开发之强大的自定义控件库