zoukankan      html  css  js  c++  java
  • 让DateTimePicker显示空时间值

    写在前面:在.net中让DateTimePicker显示一个空的时间值,也许是很容易的事情,但事实上,也不是很容易的,至少,没有经过努力的修改和重画,你是达不到的。在修改这个控件的时候,你又常常发现会有bug。下面介绍一个方法,至少源作者是经过研究的,没有发现多少问题。

    源网址
    http://www.codeproject.com/KB/selection/Nullable_DateTimePicker.aspx
    你可以在上述的网址找到源代码和英文的说明。

    效果图
    下图中,你只要按一下Delete键就可以将DateTimePicker的值设置为空,实际的值是DateTime.MinValue,这一个简单的效果,也许是很多程序员想看到。不过学习一下这个控件。

    源代码
    最重要的两个重载方法是下面俩。
    protected override void OnCloseUp(EventArgs eventargs)
    protected override void OnKeyDown(KeyEventArgs e)
    DateTimePicker本身是支持自定义格式的,DateTimePickerFormat.Custom,就是声明使用自定义格式的。
      public new DateTime Value
      {
       get
       {
        if (bIsNull)
         return DateTime.MinValue;
        else
         return base.Value;
       }
       set
       {
        if (value == DateTime.MinValue)
        {
         if (bIsNull == false)
         {
          oldFormat = this.Format;
          oldCustomFormat = this.CustomFormat;
          bIsNull = true;
         }

         this.Format = DateTimePickerFormat.Custom;
         this.CustomFormat = " ";
        }
        else
        {
         if (bIsNull)
         {
          this.Format = oldFormat;
          this.CustomFormat = oldCustomFormat;
          bIsNull = false;
         }
         base.Value = value;
        }
       }
      }

    出处:小作坊网ChakMan

    C#日期控件datetimepicker保存空值方法

    2009-06-01 15:37

    方法一(推荐):

    设置datetimepicker的属性ShowCheckBox为true

    在窗口初始化时候,添加代码this.datetimepicker1.Checked = false;

    保存日期值入库的时候,就可以根据if(this.datetimepicker1.Checked ==false),保存空值。

    方法二:

    在窗口初始化函数中添加:
    this.dateTimePicker1.Format=DateTimePickerFormat.Custom;
    this.dateTimePicker1.CustomFormat="   ";
    在日期改变事件里写:
    private void dateTimePicker1_ValueChanged(object sender, System.EventArgs e)
    {
    this.dateTimePicker1.Format=DateTimePickerFormat.Long;
    this.dateTimePicker1.CustomFormat=null;
    }
    这样就实现了,在程序初始化时dateTimePicker显示为空

    但是,这种写法有个问题,保存入库的时候,还要加一个判断if(this.dateTimePicker1.Text.toString()==""),保存空值;else 保存this.dateTimePicker1.value。

    这种写法遇到个bug,一直没有解决,就是日期控件默认是空的,在第一次选择一个日期后必须失去焦点才能选择新的日期,不知道什么原因?

    方法三:

    在日期控件上面覆盖一个文本框,然后初始化时候文本框是空值,每次日期选择之后将值附在文本框里面。

    http://hi.baidu.com/pollywog/blog/item/8ec254cecfd33731b600c856.html

  • 相关阅读:
    洛谷 P2915 [USACO08NOV]奶牛混合起来Mixed Up Cows 题解
    洛谷 P2687 [USACO4.3]逢低吸纳Buy Low, Buy Lower/ACWing 314 低买 题解
    7、Python异常
    必须要调整心态,积极起来,不能再偷懒
    5、Python函数
    10、Python数据库支持
    8、Python方法、属性、迭代器
    9、Python模块和标准库
    6、Python抽象的类
    UDP Linux编程(客户端&服务器端)
  • 原文地址:https://www.cnblogs.com/emanlee/p/1531308.html
Copyright © 2011-2022 走看看