可用来显示空值的时间选择控件3

类别:.NET开发 点击:0 评论:0 推荐:

public DateInput()

         {

              // 该调用是 Windows.Forms 窗体设计器所必需的。

              InitializeComponent();

 

              tbMonth.ContextMenu = mnu ;

               tbYear.ContextMenu = mnu ;

              tbDay.ContextMenu = mnu ;

              this.Height = 21 ;

              this.Value = DateTime.Now ;

              this.DateFormat = "yyyy-MM-dd" ;

              if (!this.DesignMode)

                CreateCalendar() ;           

              this.UpDown.Width = 16 ;

              this.Refresh() ;

 

         }

          private void CreateCalendar()

         {

              Calendar = new MonthCalendar() ;

              Calendar.Visible = true ;

              Calendar.DateSelected+=new DateRangeEventHandler(Calendar_DateSelected);

 

              frmCalendar = new Form() ;

              frmCalendar.FormBorderStyle = FormBorderStyle.None ;

              frmCalendar.TopMost = true ;

              frmCalendar.Width = 270 ;

              frmCalendar.Height = 145 ;

              frmCalendar.Controls.Add(Calendar) ;

              Calendar.Dock = DockStyle.Fill ;

              frmCalendar.StartPosition = FormStartPosition.Manual ;

              frmCalendar.Deactivate+=new EventHandler(Calendar_Leave);

              frmCalendar.ShowInTaskbar = false ;

         }

          private void Calendar_DateSelected(object sender, System.Windows.Forms.DateRangeEventArgs e)

         {

              this.frmCalendar.Hide() ;

              this.Value = this.Calendar.SelectionStart ;

              this.tbDay.Focus() ;

         }

          private void Calendar_Leave(object sender, System.EventArgs e)

         {

              this.frmCalendar.Hide() ;

              //this.Value = this.Calendar.SelectionStart ;        

              this.tbDay.Focus() ;

         }

          private void RefreshDisplay()

         {

              bool blGB = false ;

              string strChar = "" ;

              if (strDateFormat == "yyyy-MM-dd")

                   strChar = "-" ;

              else if (strDateFormat == "yyyy.MM.dd")

                   strChar = "." ;

              else if (strDateFormat == "yyyy/MM/dd")

                   strChar = "/" ;

              else if (strDateFormat== "yyyy年MM月dd日")

                   blGB = true ;

              else

                   strChar = strFomatChar ;

              if (blGB)

              {

                   lbSep1.Text = "年" ;

                   lbSep2.Text = "月" ;

                   lbSep3.Text = "日" ;

              }

              else

              {

                   lbSep1.Text = strChar ;

                   lbSep2.Text = strChar ;

                   lbSep3.Text = "" ;

              }

              this.Refresh() ;

         }

 

 

         /// <summary>

         /// 是不是空值

         /// </summary>

         public bool IsNull()

         {

              String strYear = tbYear.Text ;

              String strMonth = tbMonth.Text ;

              String strDay = tbDay.Text ;

 

              if (strYear == "" ||strMonth == "" ||strDay == "" )

                   return true ;

              else

                   return false ;

         }

         /// <summary>

         /// 设置值为空(实际为时间的最小值)

         /// </summary>

         public void SetValueNull()

         {

              this.Value = DateTime.MinValue ;

         }

 

         /// <summary>

         /// 清空输入值

         /// </summary>

          private void EmptyInput()

         {

              tbYear.Text = "" ;

              tbMonth.Text = "" ;

              tbDay.Text = "" ;

         }

 

          private int GetThisMonthMaxDay()

         {

              int Year = int.Parse(tbYear.Text) ;

              int Month = int.Parse(tbMonth.Text) ;

 

              switch(Month)

              {             

                   case 2:                                      

                       if (DateTime.IsLeapYear(Year))//闰年

                            return 29 ;

                       else

                            return 28 ;

                   case 1:

                   case 3:

                   case 5:

                   case 7:

                   case 8:

                   case 10:

                   case 12:

                       return 31 ;

                   case 4:

                   case 6:

                   case 9:

                   case 11:

                       return 30 ;         

                   default:

                       return 31 ;

              }

 

         }

          private void SetRightFmt()

         {            

              if (IsNull())

                   EmptyInput() ;

              else

              {

                   SetRightMonthDay() ;

              }

              this.Refresh() ;

         }

          private void SetRightMonthDay()

         {

              int MaxDay = GetThisMonthMaxDay() ;

              int Day = int.Parse(tbDay.Text) ;

 

              if (Day > MaxDay)

                   tbDay.Text = MaxDay.ToString() ;

         }

 

          private void IncDecDate(int iSign)

         {

              string strYear = tbYear.Text ;

              if (strYear == "")

                   strYear = DateTime.Now.Year.ToString() ;

              string strMonth = tbMonth.Text ;

              if (strMonth == "")

                   strMonth = DateTime.Now.Month.ToString() ;

              string strDay = tbDay.Text ;

              if (strDay == "")

                   strDay = DateTime.Now.Day.ToString() ;

 

              string strDate = strYear +"-"+ strMonth +"-" +strDay ;

 

              DateTime dtOld = DateTime.Parse(strDate) ;

              if (tbYear.Focused)

              {    

                   this.Value = dtOld.AddYears(1*iSign) ;

              }

              else if (tbMonth.Focused)

              {    

                   this.Value = dtOld.AddMonths(1*iSign) ;

              }

              else

              {    

                   this.Value = dtOld.AddDays(1*iSign) ;

              }

         }

          private Form GetWindow()

         {

              Control con = this ;

              while(!(con.Parent is Form))

                   con = con.Parent ;

              return (Form)con.Parent ;

         }

         /// <summary>

         /// 清理所有正在使用的资源。

         /// </summary>

          protected override void Dispose( bool disposing )

         {

              if( disposing )

              {

                   if(components != null)

                   {

                        components.Dispose();

                   }

              }

              base.Dispose( disposing );

         }

 

本文地址:http://com.8s8s.com/it/it42029.htm