class="p0">回《【开源】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控件开发的主界面:
自己开发的强大自定义控件效果图:
源代码目录结构:
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);
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"]; }
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();
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();
StatDateTime是一个用户控件依赖于Popup控件,控件包含了多种选项,快速录入起止时间;
1) 控件属性
名称
类型
说明
默认值
AgeBirthday
DateTime
获取或设置出生日期
AgeString
string
获取或设置年龄
2) 控件事件
3) 控件方法
4) 使用实例
从拖工具栏拖一个StatDateTime控件。
AgeText是一个用户控件依赖于Popup控件,控件会自动在出生日期与年龄相互转换;
1) 控件属性
名称
类型
说明
默认值
AllowSortWhenClickColumnHeader
bool
获取或设置是否允许点击ColumnHeader排序
true
SeqVisible
bool
获取或设置是否显示行序号
true
2) 控件事件
3) 控件方法
名称
参数
说明
DrawLines
List<DataGridViewDrawLineInfo> Lines
在指定的位置划线
4) 使用实例
从拖工具栏拖一个AgeText控件。
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控件。
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);
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(); }