前些天写的一个日期选择组件,
因为打算转向.net所以开始些写一些基础的组件,但主要还是为了练练手,
用C#2005写的
其中包括动态控件数组,与DateTime的使用
练手之日期选择组件

组件代码:

练手之日期选择组件
练手之日期选择组件using System;
练手之日期选择组件
using System.Collections.Generic;
练手之日期选择组件
using System.ComponentModel;
练手之日期选择组件
using System.Drawing;
练手之日期选择组件
using System.Data;
练手之日期选择组件
using System.Text;
练手之日期选择组件
using System.Windows.Forms;
练手之日期选择组件
using CommCode;
练手之日期选择组件
#endregion
练手之日期选择组件
练手之日期选择组件
namespace STextBox
{
练手之日期选择组件  
public partial class Calendar : UserControl
{

练手之日期选择组件    
public bool ShowSelectBar
{
练手之日期选择组件      
get
{
练手之日期选择组件        
return panel2.Visible;
练手之日期选择组件      }

练手之日期选择组件      
set
{
练手之日期选择组件        panel2.Visible 
= value;
练手之日期选择组件        Calendar_Resize(
thisnew EventArgs());
练手之日期选择组件      }

练手之日期选择组件    }

练手之日期选择组件    
public bool ShowActionButton
{
练手之日期选择组件      
get
{
练手之日期选择组件        
return button5.Visible;
练手之日期选择组件      }

练手之日期选择组件      
set
{
练手之日期选择组件        button5.Visible 
= value;
练手之日期选择组件        button6.Visible 
= value;
练手之日期选择组件      }

练手之日期选择组件    }

练手之日期选择组件    
public bool ShowActionBar
{
练手之日期选择组件      
get
{
练手之日期选择组件        
return panel4.Visible;
练手之日期选择组件      }

练手之日期选择组件      
set
{
练手之日期选择组件        panel4.Visible 
= value;
练手之日期选择组件        Calendar_Resize(
thisnew EventArgs());
练手之日期选择组件
练手之日期选择组件      }

练手之日期选择组件    }

练手之日期选择组件    Label[,] mCaleLab 
= new Label[77];
练手之日期选择组件    DateTime mCurDate 
= DateTime.Now;
练手之日期选择组件    
public DateTime Value
{
练手之日期选择组件      
get
{
练手之日期选择组件        
return mCurDate;
练手之日期选择组件      }

练手之日期选择组件    }

练手之日期选择组件    Color mWeekDayBackColor 
= Color.BlueViolet;
练手之日期选择组件    
public Color WeekDayBackColor
{
练手之日期选择组件      
get
{
练手之日期选择组件        
return mWeekDayBackColor;
练手之日期选择组件      }

练手之日期选择组件      
set
{
练手之日期选择组件        mWeekDayBackColor 
= value;
练手之日期选择组件      }

练手之日期选择组件    }

练手之日期选择组件    Color mWeekDayForeColor 
= Color.White;
练手之日期选择组件    
public Color WeekDayForeColor
{
练手之日期选择组件      
get
{
练手之日期选择组件        
return mWeekDayForeColor;
练手之日期选择组件      }

练手之日期选择组件      
set
{
练手之日期选择组件        mWeekDayForeColor 
= value;
练手之日期选择组件      }

练手之日期选择组件    }

练手之日期选择组件    Color mSelectDayBackColor 
= Color.WhiteSmoke;
练手之日期选择组件    
public Color SelectDayBackColor
{
练手之日期选择组件      
get
{
练手之日期选择组件        
return mSelectDayBackColor;
练手之日期选择组件      }

练手之日期选择组件      
set
{
练手之日期选择组件        mSelectDayBackColor 
= value;
练手之日期选择组件      }

练手之日期选择组件    }

练手之日期选择组件    Color mSelectDayForeColor 
= Color.Black;
练手之日期选择组件    
public Color SelectDayForeColor
{
练手之日期选择组件      
get
{
练手之日期选择组件        
return mSelectDayForeColor;
练手之日期选择组件      }

练手之日期选择组件      
set
{
练手之日期选择组件        mSelectDayForeColor 
= value;
练手之日期选择组件      }

练手之日期选择组件    }

练手之日期选择组件    Color mOtherDayForeColor 
= Color.Gray;
练手之日期选择组件    
public Color OtherDayForeColor
{
练手之日期选择组件      
get
{
练手之日期选择组件        
return mOtherDayForeColor;
练手之日期选择组件      }

练手之日期选择组件      
set
{
练手之日期选择组件        mOtherDayForeColor 
= value;
练手之日期选择组件      }

练手之日期选择组件    }

练手之日期选择组件    Color mOtherDayBackColor 
= SystemColors.ButtonFace;
练手之日期选择组件    
public Color OtherDayBackColor
{
练手之日期选择组件      
get
{
练手之日期选择组件        
return mOtherDayBackColor;
练手之日期选择组件      }

练手之日期选择组件      
set
{
练手之日期选择组件        mOtherDayBackColor 
= value;
练手之日期选择组件      }

练手之日期选择组件    }

练手之日期选择组件    Color mTodayBackColor 
= Color.MediumSlateBlue;
练手之日期选择组件    
public Color TodayBackColor
{
练手之日期选择组件      
get
{
练手之日期选择组件        
return mTodayBackColor;
练手之日期选择组件      }

练手之日期选择组件      
set
{
练手之日期选择组件        mTodayBackColor 
= value;
练手之日期选择组件      }

练手之日期选择组件    }

练手之日期选择组件    
string mOldDate = "1,0";
练手之日期选择组件    
bool mInit = true;
练手之日期选择组件    
bool mLbClk = false;
练手之日期选择组件    
int mBeginYear = 0;
练手之日期选择组件    
int mEndYear = 0;
练手之日期选择组件    
bool mRsz = false;
练手之日期选择组件    
#endregion

练手之日期选择组件    
private void InitControl()
{
练手之日期选择组件      
int x = 0;
练手之日期选择组件      mInit 
= true;
练手之日期选择组件      mBeginYear 
= mCurDate.Year - 20;
练手之日期选择组件      mEndYear 
= mCurDate.Year + 20;
{
练手之日期选择组件        
"","","","","","",""
练手之日期选择组件      }
;
{
练手之日期选择组件        
"一月""二月""三月""四月""五月""六月""七月""八月""九月""十月""十一月""十二月"
练手之日期选择组件      }
;
练手之日期选择组件      
for (int i = 0; i < 12; i++)
{
练手之日期选择组件        comboBox1.Items.Add(tmpMonthName[i]);
练手之日期选择组件      }

练手之日期选择组件      comboBox1.SelectedIndex 
= mCurDate.Month - 1;
练手之日期选择组件      
for (int i = mBeginYear; i <= mEndYear; i++)
{
练手之日期选择组件        comboBox2.Items.Add(i.ToString() 
+ '');
练手之日期选择组件        x
++;
练手之日期选择组件        
if (i == mCurDate.Year) comboBox2.SelectedIndex = x - 1;
练手之日期选择组件      }

练手之日期选择组件      x 
= 0;
练手之日期选择组件      
int tmpWidth = 25;//flowLayoutPanel1.Width / 7;
练手之日期选择组件
      int tmpHeight = 25;//flowLayoutPanel1.Height / 5;
练手之日期选择组件
      for (int i = 0; i < 7; i++)
{
练手之日期选择组件        
for (int j = 0; j < 7; j++)
{
练手之日期选择组件          mCaleLab[i, j] 
= new Label();
练手之日期选择组件          mCaleLab[i, j].Visible 
= true;
练手之日期选择组件          mCaleLab[i, j].AutoSize 
= false;
练手之日期选择组件          mCaleLab[i, j].Parent 
= panel3;
练手之日期选择组件          mCaleLab[i, j].Width 
= tmpWidth;
练手之日期选择组件          mCaleLab[i, j].Height 
= tmpHeight;
练手之日期选择组件          mCaleLab[i, j].TextAlign 
= ContentAlignment.MiddleCenter;
练手之日期选择组件          mCaleLab[i, j].Top 
= (i % 7* tmpHeight;
练手之日期选择组件          mCaleLab[i, j].Left 
= (j % 8* tmpWidth;
练手之日期选择组件          mCaleLab[i, j].Tag 
= string.Format("{0},{1}", i, j);
练手之日期选择组件          
if (i == 0)
{
练手之日期选择组件            mCaleLab[i, j].Text 
= tmpWeekDayName[j];
练手之日期选择组件            mCaleLab[i, j].BackColor 
= mWeekDayBackColor;
练手之日期选择组件            mCaleLab[i, j].ForeColor 
= mWeekDayForeColor;
练手之日期选择组件          }

练手之日期选择组件          mCaleLab[i, j].Click 
+= new EventHandler(OnCaleLabClick);
练手之日期选择组件          mCaleLab[i, j].DoubleClick 
+= new EventHandler(OnDoubleClick);
练手之日期选择组件        }

练手之日期选择组件      }

练手之日期选择组件      label2.BackColor 
= mTodayBackColor;
练手之日期选择组件      linkLabel1.Text 
= mCurDate.ToShortDateString();
练手之日期选择组件      mInit 
= false;
练手之日期选择组件      SelectDay(DateTime.Now);
练手之日期选择组件    }

练手之日期选择组件    
private void SelectDay(DateTime pDateTime)
{
练手之日期选择组件      SelectDay(pDateTime.Year, pDateTime.Month, pDateTime.Day);
练手之日期选择组件    }

练手之日期选择组件    
private void SelectDay(int pYear, int pMonth, int pDay)
{
练手之日期选择组件      
if (mInit) return;
练手之日期选择组件      
int tmpMaxDays = 31;
练手之日期选择组件      
int tmpFirstDay = 0;
练手之日期选择组件      
int tmpDays = 0;
练手之日期选择组件      
int tmpLastRow = 0;
练手之日期选择组件      
int tmpLastCol = 0;
练手之日期选择组件      
int x = 0;
练手之日期选择组件      tmpMaxDays 
= DateTime.DaysInMonth(pYear, pMonth);
练手之日期选择组件      tmpFirstDay 
= (int)(new DateTime(pYear, pMonth, 1)).DayOfWeek;
练手之日期选择组件      tmpLastRow 
= 6;
练手之日期选择组件      
if (tmpFirstDay < 0) tmpFirstDay = 6;
练手之日期选择组件      
for (int i = 1; i < 7; i++)
{
练手之日期选择组件        
for (int j = 0; j < 7; j++)
{
练手之日期选择组件          mCaleLab[i, j].Text 
= "";
练手之日期选择组件          mCaleLab[i, j].BorderStyle 
= BorderStyle.None;
练手之日期选择组件          mCaleLab[i, j].ForeColor 
= SystemColors.ControlText;
练手之日期选择组件          mCaleLab[i, j].BackColor 
= SystemColors.ButtonFace;
练手之日期选择组件          mCaleLab[i, j].Font 
= new Font(mCaleLab[i, j].Font, FontStyle.Regular);
练手之日期选择组件        }

练手之日期选择组件      }

练手之日期选择组件      
for (int i = 1; i < 7; i++)
{
练手之日期选择组件        
if (x > tmpMaxDays)
{
练手之日期选择组件          tmpLastRow 
= --i;
练手之日期选择组件          
break;
练手之日期选择组件        }

练手之日期选择组件        
for (int j = i == 1 ? tmpFirstDay : 0; j < 7; j++)
{
练手之日期选择组件          
if (++> tmpMaxDays)
{
练手之日期选择组件            tmpLastCol 
= j;
练手之日期选择组件            
break;
练手之日期选择组件          }

练手之日期选择组件          mCaleLab[i, j].Text 
= Convert.ToString(x);
练手之日期选择组件          
if (DateTime.Parse(string.Format("{0}-{1}-{2}", pYear, pMonth, x)) == DateTime.Today)
{
练手之日期选择组件            mCaleLab[i, j].BackColor 
= mTodayBackColor;
练手之日期选择组件            mCaleLab[i, j].Font 
= new Font(mCaleLab[i, j].Font, FontStyle.Bold);
练手之日期选择组件          }

练手之日期选择组件          
if (DateTime.Parse(string.Format("{0}-{1}-{2}", pYear, pMonth, x)) == DateTime.Parse(string.Format("{0}-{1}-{2}", pYear, pMonth, pDay)))
{
练手之日期选择组件            mCaleLab[i, j].BorderStyle 
= BorderStyle.FixedSingle;
练手之日期选择组件            mOldDate 
= (string)mCaleLab[i, j].Tag;
练手之日期选择组件          }

练手之日期选择组件        }

练手之日期选择组件        mCurDate 
= new DateTime(pYear, pMonth, pDay);
练手之日期选择组件      }

练手之日期选择组件      tmpMaxDays 
= DateTime.DaysInMonth(pMonth == 1 ? pYear - 1 : pYear, pMonth == 1 ? 12 : pMonth - 1);
练手之日期选择组件      tmpDays 
= tmpMaxDays - tmpFirstDay;
练手之日期选择组件      
if (--tmpFirstDay >= 0)
练手之日期选择组件        
for (int i = tmpMaxDays; i >= tmpDays; i--)
{
练手之日期选择组件          mCaleLab[
1, tmpFirstDay].Text = i.ToString();
练手之日期选择组件          mCaleLab[
1, tmpFirstDay].ForeColor = mOtherDayForeColor;
练手之日期选择组件          
if (--tmpFirstDay < 0break;
练手之日期选择组件        }

练手之日期选择组件      x 
= 0;
练手之日期选择组件      
for (int i = tmpLastRow; i < 7; i++)
{
练手之日期选择组件        
for (int j = i == tmpLastRow ? tmpLastCol : 0; j < 7; j++)
{
练手之日期选择组件          mCaleLab[i, j].Text 
= Convert.ToString(++x);
练手之日期选择组件          mCaleLab[i, j].ForeColor 
= mOtherDayForeColor;
练手之日期选择组件        }

练手之日期选择组件      }

练手之日期选择组件    }

练手之日期选择组件    
private void OnDoubleClick(object sender, EventArgs e)
{
练手之日期选择组件    }

练手之日期选择组件    
private void OnCaleLabClick(object sender, EventArgs e)
{
练手之日期选择组件      mLbClk 
= true;
练手之日期选择组件      
string tmpCurIndex = "1,0";
练手之日期选择组件      tmpCurIndex 
= (string)((Label)sender).Tag;
练手之日期选择组件      
if (CM.GetCode(tmpCurIndex, ","== "0"return;
练手之日期选择组件      
if (mCaleLab[Convert.ToInt16(CM.GetCode(tmpCurIndex, ",")), Convert.ToInt16(CM.GetName(tmpCurIndex, ","))].ForeColor == mOtherDayForeColor)
{
练手之日期选择组件        
if (CM.GetCode(tmpCurIndex, ","== "1")
{
练手之日期选择组件          
if (comboBox1.SelectedIndex == 0)
练手之日期选择组件            comboBox2.SelectedIndex
--;
练手之日期选择组件          
if (comboBox1.SelectedIndex == 0)
练手之日期选择组件            comboBox1.SelectedIndex 
= 11;
练手之日期选择组件          
else
练手之日期选择组件            comboBox1.SelectedIndex
--;
练手之日期选择组件        }

练手之日期选择组件        
else
{
练手之日期选择组件          
if (comboBox1.SelectedIndex == 11)
练手之日期选择组件            comboBox2.SelectedIndex
++;
练手之日期选择组件          
if (comboBox1.SelectedIndex == 11)
练手之日期选择组件            comboBox1.SelectedIndex 
= 0;
练手之日期选择组件          
else
练手之日期选择组件            comboBox1.SelectedIndex
++;
练手之日期选择组件        }

练手之日期选择组件        SelectDay(comboBox2.SelectedIndex 
+ mBeginYear, comboBox1.SelectedIndex + 1, Convert.ToInt16(((Label)sender).Text));
练手之日期选择组件        mOldDate 
= tmpCurIndex;
练手之日期选择组件      }

练手之日期选择组件      
else
{
练手之日期选择组件        mCaleLab[Convert.ToInt16(CM.GetCode(mOldDate, 
",")), Convert.ToInt16(CM.GetName(mOldDate, ","))].BorderStyle = BorderStyle.None;
练手之日期选择组件        mOldDate 
= tmpCurIndex;
练手之日期选择组件        mCaleLab[Convert.ToInt16(CM.GetCode(mOldDate, 
",")), Convert.ToInt16(CM.GetName(mOldDate, ","))].BorderStyle = BorderStyle.FixedSingle;
练手之日期选择组件      }

练手之日期选择组件      mLbClk 
= false;
练手之日期选择组件    }

练手之日期选择组件    
private void OnMouseLeave(object sender, EventArgs e)
{
练手之日期选择组件      Label tmpLab 
= (Label)sender;
练手之日期选择组件      tmpLab.BorderStyle 
= BorderStyle.None;
练手之日期选择组件    }

练手之日期选择组件    
private void OnMouseHover(object sender, EventArgs e)
{
练手之日期选择组件      Label tmpLab 
= (Label)sender;
练手之日期选择组件      tmpLab.BorderStyle 
= BorderStyle.FixedSingle;
练手之日期选择组件
练手之日期选择组件    }

练手之日期选择组件    
private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
练手之日期选择组件      mLbClk 
= true;
练手之日期选择组件      comboBox1.SelectedIndex 
= DateTime.Parse(linkLabel1.Text).Month - 1;
练手之日期选择组件      comboBox2.SelectedIndex 
= DateTime.Parse(linkLabel1.Text).Year - mBeginYear;
练手之日期选择组件      SelectDay(DateTime.Parse(linkLabel1.Text));
练手之日期选择组件      mLbClk 
= false;
练手之日期选择组件    }

练手之日期选择组件    
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
练手之日期选择组件      
if (mLbClk) return;
练手之日期选择组件      SelectDay(mBeginYear 
+ comboBox2.SelectedIndex, comboBox1.SelectedIndex + 11);
练手之日期选择组件    }

练手之日期选择组件    
private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
{
练手之日期选择组件      
if (mLbClk) return;
练手之日期选择组件      SelectDay(mBeginYear 
+ comboBox2.SelectedIndex, comboBox1.SelectedIndex + 11);
练手之日期选择组件    }

练手之日期选择组件    
private void button4_Click(object sender, EventArgs e)
{
练手之日期选择组件      
if (comboBox1.SelectedIndex != comboBox1.Items.Count - 1)
练手之日期选择组件        comboBox1.SelectedIndex 
= comboBox1.SelectedIndex + 1;
练手之日期选择组件    }

练手之日期选择组件    
private void button3_Click(object sender, EventArgs e)
{
练手之日期选择组件      
if (comboBox1.SelectedIndex != 0)
练手之日期选择组件        comboBox1.SelectedIndex 
= comboBox1.SelectedIndex - 1;
练手之日期选择组件
练手之日期选择组件    }

练手之日期选择组件
练手之日期选择组件    
#endregion
练手之日期选择组件    
public Calendar()
{
练手之日期选择组件      InitializeComponent();
练手之日期选择组件    }

练手之日期选择组件    
private void Calendar_Load(object sender, EventArgs e)
{
练手之日期选择组件      mRsz 
= true;
练手之日期选择组件      
this.Size = new Size(175239);
练手之日期选择组件      InitControl();
练手之日期选择组件      mRsz 
= false;
练手之日期选择组件    }

练手之日期选择组件    
private void Calendar_Resize(object sender, EventArgs e)
{
练手之日期选择组件      
if (mRsz) return;
练手之日期选择组件      mRsz 
= true;
练手之日期选择组件      
//180
练手之日期选择组件
      this.Size = new Size(175,180);
练手之日期选择组件      
if (panel2.Visible)
练手之日期选择组件        
this.Size = new Size(175this.Size.Height + panel2.Height);
练手之日期选择组件      
if (panel4.Visible)
{
练手之日期选择组件        panel4.Top 
= panel2.Visible ? panel2.Height : 0 + 180;
练手之日期选择组件        
this.Size = new Size(175this.Size.Height + panel4.Height);
练手之日期选择组件      }

练手之日期选择组件      mRsz 
= false;
练手之日期选择组件    }

练手之日期选择组件
练手之日期选择组件    
private void panel4_Paint(object sender, PaintEventArgs e)
{
练手之日期选择组件    
练手之日期选择组件    }

练手之日期选择组件  }

练手之日期选择组件}

练手之日期选择组件


一个函数库,现在还只有很少的一部分函数
练手之日期选择组件namespace CommCode
{

练手之日期选择组件  
/// 通用方法
练手之日期选择组件  
/// </summary>
练手之日期选择组件  public static class CM
{


练手之日期选择组件    
/// 解析编码字串
练手之日期选择组件    
/// </summary>
练手之日期选择组件    
/// <param name="pParseString">完整字串,格式:"编码 名称"用空格分隔</param>
练手之日期选择组件    
/// <returns>编码</returns>
练手之日期选择组件    public static string ParseIdSpc(string pParseString)
{
练手之日期选择组件      
return GetCode(pParseString, " ");
练手之日期选择组件    }


练手之日期选择组件    
/// 解析名称字串
练手之日期选择组件    
/// </summary>
练手之日期选择组件    
/// <param name="pParseString">完整字串,格式:"编码 名称"用空格分隔</param>
练手之日期选择组件    
/// <returns>名称</returns>
练手之日期选择组件    public static string ParseNameSpc(string pParseString)
{
练手之日期选择组件      
return GetName(pParseString, " ");
练手之日期选择组件    }


练手之日期选择组件    
/// 解析编码字串
练手之日期选择组件    
/// </summary>
练手之日期选择组件    
/// <param name="pParseString">完整字串,格式:"[编码]名称"</param>
练手之日期选择组件    
/// <returns>编码</returns>
练手之日期选择组件    public static string ParseId(string pParseString)
{
练手之日期选择组件      
return GetCode(pParseString.Substring(1), "]");
练手之日期选择组件    }


练手之日期选择组件    
/// 解析名称字串
练手之日期选择组件    
/// </summary>
练手之日期选择组件    
/// <param name="pParseString">完整字串,格式:"[编码]名称"</param>
练手之日期选择组件    
/// <returns>名称</returns>
练手之日期选择组件    public static string ParseName(string pParseString)
{
练手之日期选择组件      
return GetName(pParseString.Substring(1), "]");
练手之日期选择组件    }


练手之日期选择组件    
/// 解析指定分隔符的编码
练手之日期选择组件    
/// </summary>
练手之日期选择组件    
/// <param name="pParseString">完整字串,格式:"编码%s名称"%s分隔符</param>
练手之日期选择组件    
/// <param name="pSplitString">分隔符</param>
练手之日期选择组件    
/// <returns>编码</returns>
练手之日期选择组件    public static string GetCode(string pParseString, string pSplitString)
{
练手之日期选择组件      
if (pSplitString == "" || pParseString == ""return "";
练手之日期选择组件      
return pParseString.Substring(0, pParseString.IndexOf(pSplitString));
练手之日期选择组件    }


练手之日期选择组件    
/// 解析指定分隔符的名称
练手之日期选择组件    
/// </summary>
练手之日期选择组件    
/// <param name="pParseString">完整字串,格式:"编码%s名称"%s分隔符</param>
练手之日期选择组件    
/// <param name="pSplitString">分隔符</param>
练手之日期选择组件    
/// <returns>名称</returns>
练手之日期选择组件    public static string GetName(string pParseString, string pSplitString)
{
练手之日期选择组件      
if (pSplitString == "" || pParseString == ""return "";
练手之日期选择组件      
return pParseString.Substring(pParseString.IndexOf(pSplitString)+1 );
练手之日期选择组件    }

练手之日期选择组件    
#endregion
练手之日期选择组件    
练手之日期选择组件  }

练手之日期选择组件}

相关文章:

  • 2022-12-23
  • 2022-02-27
  • 2021-10-16
  • 2021-09-01
  • 2021-08-11
  • 2021-12-02
  • 2021-10-28
  • 2021-10-02
猜你喜欢
  • 2021-04-15
  • 2022-12-23
  • 2021-05-08
  • 2021-11-28
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案