二十五、【开源】EFW框架Winform前端开发之强大的自定义控件库
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=;
lineInfo.EndIndexOfRowColumn=;
lineInfo.DrawLineOfRowColumnIndex=;
lineInfo.DrawDirection=Direction.TopToButtom;
lineInfo.Width=;
lineInfo.Color=Color.Red;
list.Add(lineInfo);
//画分组线
this.dataGrid1.DrawLines(list);
this.dataGrid1.SetRowColor(, 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(, 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前端开发之强大的自定义控件库的更多相关文章
- 二十四、【开源】EFW框架Winform前端开发之项目结构说明和调试方法
回<[开源]EFW框架系列文章索引> EFW框架源代码下载V1.2:http://pan.baidu.com/s/1hcnuA EFW框架实例源代码下载:http://pan ...
- 二十六、【开源框架】EFW框架Winform前端开发之Grid++Report报表、条形码、Excel导出、图表控件
回<[开源]EFW框架系列文章索引> EFW框架源代码下载V1.2:http://pan.baidu.com/s/1hcnuA EFW框架实例源代码下载:http://pan ...
- 二十三、【开源】EFW框架Web前端开发之常用组件(FusionCharts图表、ReportAll报表等)
回<[开源]EFW框架系列文章索引> EFW框架源代码下载V1.2:http://pan.baidu.com/s/1hcnuA EFW框架实例源代码下载:http://pan ...
- 二十一、【.Net开源框架】EFW框架Web前端开发之目录结构和使用FireBug调试方法
回<[开源]EFW框架系列文章索引> EFW框架源代码下载V1.2:http://pan.baidu.com/s/1hcnuA EFW框架实例源代码下载:http://pan.baidu. ...
- 二十九、EFW框架开发的系统支持SaaS模式和实现思路
回<[开源]EFW框架系列文章索引> EFW框架源代码下载V1.3:http://pan.baidu.com/s/1c0dADO0 EFW框架实例源代码下载:http://p ...
- 二十五、CI框架URL辅助函数之base_url函数
一.在UI根目录新建一个pic目录,里面放一个图片,如下 二.在我们打View里面写入一下代码,base_ur函数返回的是网站根目录,代码见附图: 三.两种写法,显示效果如下: 四.我们查看浏览器的源 ...
- 【开源EFW框架】框架中自定义控件GridBoxCard使用实例说明
回<[开源]EFW框架系列文章索引> EFW框架源代码下载V1.3:http://pan.baidu.com/s/1c0dADO0 EFW框架实例源代码下载:http://p ...
- WCF技术剖析之二十五: 元数据(Metadata)架构体系全景展现[元数据描述篇]
原文:WCF技术剖析之二十五: 元数据(Metadata)架构体系全景展现[元数据描述篇] 在[WS标准篇]中我花了很大的篇幅介绍了WS-MEX以及与它相关的WS规范:WS-Policy.WS-Tra ...
- Java进阶(二十五)Java连接mysql数据库(底层实现)
Java进阶(二十五)Java连接mysql数据库(底层实现) 前言 很长时间没有系统的使用java做项目了.现在需要使用java完成一个实验,其中涉及到java连接数据库.让自己来写,记忆中已无从搜 ...
随机推荐
- AngularJS应用页面切换优化方案
葡萄城的一款尚在研发中的产品,对外名称暂定为X项目.其中使用了已经上市的Wijmo中SpreadJS产品,另外,在研发过程中整理了一些研发总结分享给大家.如本篇的在页面切换的过程中优化方案,欢迎大家跟 ...
- Origin的图片导出问题
很多会议投稿都会要求提交的pdf文件用的是type1字体,因为type1字体是矢量字体,无论怎么放大缩小都不会失真.一旦pdf里嵌入了其他非矢量字体,例如type3字体,就会通不过测试,一个典型的例子 ...
- fgets函数执行完成后,文件指针如何移动?
用fgets执行之后,读取了文件中的一行,这时文件位置指针是自动指向文件的下一行的开头吗,还是指向当前行的结尾?如果一行的字符串没读取完会怎样? 实例结果: 如果一行的字符串没读取完会,下一次会接着上 ...
- Atitit..组件化事件化的编程模型--(2)---------Web datagridview 服务器端控件的实现原理and总结
Atitit..组件化事件化的编程模型--(2)---------Web datagridview 服务器端控件的实现原理and总结 1. 服务端table控件的几个流程周期 1 1.1. 确认要显示 ...
- TF Boys (TensorFlow Boys ) 养成记(一)
本资料是在Ubuntu14.0.4版本下进行,用来进行图像处理,所以只介绍关于图像处理部分的内容,并且默认TensorFlow已经配置好,如果没有配置好,请参考官方文档配置安装,推荐用pip安装.关于 ...
- MyEclipse使用总结——设置MyEclipse开发项目时使用的JDK
安装好MyEclipse之后,在MyEclipse中开发项目时,默认使用的是MyEclipse是自带的JDK,如下图所示: 如果我们需要使用自己安装好的JDK,那么就需要在MyEclipse中重新设置 ...
- php类自动装载、链式操作、魔术方法
1.自动装载实例 目录下有3个文件:index.php load.php tests文件夹 tests文件夹里有 test1.php <?php namespace Tests; class T ...
- Android布局优化
前言 本篇文章为Android优化的布局部分,该部分应该是Android中很重要的,无论是在自定义控件中,还是在简单的书写布局时,都应该尽量遵循一些优化原则,这样布局的绘制效率才会更高,体验才能更好. ...
- 用inno Setup做应用程序安装包的示例脚本(.iss文件)(
用innoSetup做应用程序安装包的示例脚本(.iss文件),具体要看innoSetup附带的文档,好象是pascal语言写的脚本. 示例1(应用程序.exe,客户端安装): ;{089D6802- ...
- C# .net中获取台式电脑中串口设备的名称
来源:http://www.cnblogs.com/hshuzhao/p/4028856.html?utm_source=tuicool&utm_medium=referral .情境: 做项 ...