二十五、【开源】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();
}

 

posted @ 2014-09-27 08:18  kakake  阅读(7152)  评论(19编辑  收藏  举报