• 二十五、【开源】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();
    }
  • 相关阅读:
    Thinkphp下实现D函数用于实例化Model格式
    Thinkphp3.2下导入所需的类库 同java的Import 本函数有缓存功能
    Thinkphp下记录和统计时间(微秒)和内存使用情况
    python打造seo必备工具-自动查询排名
    Python爬虫爬企查查数据
    解决Android8.0系统应用打开webView报错
    团队冲刺第七天个人博客
    团队冲刺第六天个人博客
    团队冲刺第五天个人博客
    团队冲刺第四天个人博客
  • 原文地址:https://www.cnblogs.com/kakake/p/3995877.html
走看看 - 开发者的网上家园