• Date日期选择美化控件----------WinForm控件开发系列


    效果图:

    控件的功能包括以下。

             年                  年月                    年月日                  年月日时                       年月日时分                       年月日时分秒

    日期面板控件 DatePickerExt 是基于 Control 控件基础类开发的,不是由组合控件组成的,也就是说 DatePickerExt 没有用到WinForm其他的一些基础控件,界面上的按钮也是直接用 GDI 绘制出来的。而 DateExt  控件基于 Control 控件基础类 配合 TextBox 控件 开发的,弹出层则是用 ToolStripDropDown 组件完成。这个以后应该不会更新,应该比较完善,日期和时间功能都有了,格式化后也有8000多行代码。

     DateExt  控件介绍:

    通过对 DateStyle 属性设置,控件功能可以是输入模式或只能从日期面板选择模式。  输入模式是启用 TextBox 控件, 只能从日期面板选择 则直接由GDI绘制界面。

    通过 ReadOnly 属性可以设置 DateExt  控件只读,也就是输入模式或只能从日期面板选择模式的功能都被禁止。

    通过 Tab 键可以激活控件,在通过 Enter 键打开弹层。如下:

     当控件为输入模式时,在控件激活状态下可以通过键盘的左右键分别选中年、月、日 的值再通过键盘的上下键修改值,这是模拟原生控件的功能,如下:

     重写方法如下

    新增属性如下

     DatePickerExt  控件介绍:

    这个控件的UI界面是参考网上JQ日期插件开发出来的。

    日期面板主界面主要由三部分组成,界面布局的信息存放在 DateClass 类里面,里面包括

    DateTopBarClass(日期面板顶部工具栏)、     DateMainClass(日期面板)、             BottomBarClass(底部工具栏)   

                     

    这些类主要记录按钮、选项的 Rectangle 信息,控件的鼠标事件和单击事件都是通过重写基类相应事件和配合Rectangle从而判断事件的处理方式。

    DateDisplayType 属性可以设置面板的功能,包括(年、年月、年月日、年月日时、、年月日时分、、年月日时分秒)六种功能。

     通过设置 AutoConfirm 属性可以自动完成面板的确认按钮事件,但限制与以下情况 

    1.在年功能选择年份时。

    2.在年月功能选择月份时。

    3.在年月日功能选择日时,

    4.点击底部工具栏的清除按钮时。

    5.点击底部工具栏现在按钮时。

    通过设置 DateReadOnly 属性可以把面板设置成只读的状态。

    日期值和这三个属性有关 DateValue(日期值)、MinDateValue(限制 DateValue 的最小值)、MaxDateValue(限制 DateValue 的最大值)。

     MinMaxInput 属性为 True 是限制 MinDateValue  MaxDateValue 只会在日期面板上手动选择时才做出限制,例如  MinDateValue 为2005年,MaxDateValue 为2009,代码直接赋值 DateValue 为2000年 ,这种情况下 DateValue 不会受 MinDateValue MaxDateValue  的限制,但又不能通过日期面板选择超出范围的年份。否则任何情况下 DateValue 都会受 MinDateValue MaxDateValue  的限制。

    通过 MinMaxTip 属性可以设置是否显示 MinDateValue  MaxDateValue 的提示如下红色边框内容:

    顶部工具栏功能包括年份、月前后移动和打开年面板月面板。

     

    下图是时间按钮,

    按钮会根据控件的时间制动绘制出相应的时间刻度。如下

    时间选项列表的滚动条是用 GUI 绘制结合鼠标事件模仿的。滚动条还能通过滚轮操作。

      重写方法如下

    公开方法如下

    新增类如下

    新增事件如下

    新增属性如下

    控件的每次的绘制会使用到大量的画笔,因此我把控件所需要用到的画笔都放在 SolidBrushManage 里面去管理,画笔会在日期面板隐藏或日期棉般失去激活状态时自动释放画笔,我之前试过直接在每次绘制控件时都初始化画笔,用.NET Memory Profiler 4.0 可以观察画笔的创建和释放会变得很频繁。所以目前我采取这种做法,你也可以继续优化这一部分。目前控件的绘制时整个界面全部一起绘制的,你也可以优化成局部更新绘制。

    控件库的源码已整体发布到gitee,下载地址:(花木兰控件库)https://gitee.com/tlmbem/hml

  • 相关阅读:
    测试面试03
    测试面试02
    测试面试01
    测试10
    测试09
    Python 知识要点:变量 可变和不可变
    Python 知识要点:变量及引用
    Python 知识要点:名片管理系统 2.0
    Python 知识要点:多值参数
    Python 知识要点:四种数值交换方法
  • 原文地址:https://www.cnblogs.com/tlmbem/p/11480577.html
Copyright © 2020-2023  润新知