摘要:此控件跟据“封装梅花雪疏影横斜”的“Web Calendar ver 3.0 网页日历”提供的JS代码来做的,在此特别感谢。

截图如下:

源码如下:

//-----------------------------------------------------------------------------------------------------------------------

usingSystem;
usingSystem.Web;
usingSystem.Web.UI;
usingSystem.Collections.Specialized;

/**//*******************************************************************
 * 功能:实现单选日历
 *  
 * 时间:2004-11
 * 作者:iceberg
 * 使用:
 * 属性:
 * 备注:目前并未实现日历的样式定义,有时间的话我会加上去:)
 ********************************************************************
*/

namespaceKSI.WebControls
{
/**////<summary>///通过一个弹出窗口让用户选择一个日期
///</summary>

publicclassCalendar : Control, IPostBackDataHandler 
{

user_define_variable_property#regionuser_define_variable_property
//输出用的Html代码privatestring_sOutput_Html=""
privatestring_sJavaScript="";
//按钮和文本框的样式名privatestring_TextBoxClass,_ButtonClass;
//是否使用默认日期privatebool_DefaultDate=false;
//默认日期privatestring_Text="";
//全球唯一标识码,用于在客户端注册JavaScript脚本块privateconststring_sJavaScript_ID="{d13646d6-4dca-4366-bcb4-b1bd23c035ad}";

/**////<summary>///文本框的样式:Class格式
///</summary>

publicstringTextBoxClass
{
set{ _TextBoxClass=value; }get{return_TextBoxClass;  }    }

/**////<summary>///按钮的样式:Class格式
///</summary>

publicstringButtonClass
{
set{ _ButtonClass=value; }get{return_ButtonClass;  }    }

/**////<summary>///输入的日期的值
///</summary>

publicstringText
{
set{ _Text=value;}get{return_Text; }    }

/**////<summary>///是否使用默认值。默认值为当前日期
///</summary>

publicboolDefaultDate
{
set{ _DefaultDate=value;}get{return_DefaultDate; }    }

#endregion

user_define_function#regionuser_define_function
//生成输出到Htm的JavaScript脚本函数privatevoid_MakeJavaScript()
{
      _sJavaScript
+="<Script Language=\"javascript\">\n";
      _sJavaScript
+="<!--\n";
      _sJavaScript
+="document.write(\"<div id=meizzCalendarLayer style='position: absolute; z-index: 9999; width: 144; height: 193; display: none'>\");\n";
      _sJavaScript
+="document.write(\"<iframe name=meizzCalendarIframe scrolling=no frameborder=0width=100%height=100%></iframe></div>\");\n";
      _sJavaScript
+="function writeIframe()\n";
      _sJavaScript
+="{\n";
      _sJavaScript
+="var strIframe = \"<html><head><meta http-equiv='Content-Type'content='text/html; charset=gb2312'><style>\"+\n";
      _sJavaScript
+="\"*{font-size: 12px; font-family: 宋体}\"+\n";
      _sJavaScript
+="\".bg{  color: \"+ WebCalendar.lightColor +\"; cursor:default; background-color: \"+ WebCalendar.darkColor +\";}\"+\n";
      _sJavaScript
+="\"table#tableMain{ width:142; height:180;}\"+\n";
      _sJavaScript
+="\"table#tableWeek td{ color: \"+ WebCalendar.lightColor +\";}\"+\n";
      _sJavaScript
+="\"table#tableDay  td{ font-weight: bold;}\"+\n";
      _sJavaScript
+="\"td#meizzYearHead, td#meizzYearMonth{color: \"+WebCalendar.wordColor +\"}\"+\n";
      _sJavaScript
+="\".out{ text-align: center; border-top: 1px solid \"+ WebCalendar.DarkBorder +\"; border-left: 1px solid \"+ WebCalendar.DarkBorder +\";\"+\n";
      _sJavaScript
+="\"border-right: 1px solid \"+ WebCalendar.lightColor +\"; border-bottom: 1px solid \"+ WebCalendar.lightColor +\";}
\"+\n";
      _sJavaScript
+="\".over{ text-align: center; border-top: 1px solid #FFFFFF; border-left: 1px solid #FFFFFF;\"+\n";
      _sJavaScript
+="\"border-bottom: 1px solid \"+ WebCalendar.DarkBorder +\"; border-right: 1px solid \"+ WebCalendar.DarkBorder +\"}
\"+\n";
      _sJavaScript
+="\"input{ border: 1px solid \"+ WebCalendar.darkColor +\"; padding-top: 1px; height:18; cursor: hand;\"+\n";
      _sJavaScript
+="\"color:\"+ WebCalendar.wordColor +\"; background-color: \"+ WebCalendar.btnBgColor +\"}
\"+\n";
      _sJavaScript
+="\"</style></head><body onselectstart='return false'style='margin: 0px'oncontextmenu='return false'><form name=meizz>\";\n";
      _sJavaScript
+="if (WebCalendar.drag){ strIframe += \"<scr\"+\"ipt language=javascript>\"+\n";
      _sJavaScript
+="\"var drag=false, cx=0, cy=0, o=parent.WebCalendar.calendar; function document.onmousemove(){\"+\n";
      _sJavaScript
+="\"if(parent.WebCalendar.drag&&drag){if(o.style.left=='')o.style.left=0;if(o.style.top=='')o.style.top=0;\"+\n";
      _sJavaScript
+="\"o.style.left=parseInt(o.style.left)+window.event.clientX-cx;\"+\n";
      _sJavaScript
+="\"o.style.top=parseInt(o.style.top)+window.event.clientY-cy;}
}
\"+\n";
      _sJavaScript
+="\"function document.onkeydown(){switch(window.event.keyCode){case27: parent.hiddenCalendar();break;\"+\n";
      _sJavaScript
+="\"case37: parent.prevM();break;case38: parent.prevY();break;case39: parent.nextM();break;case40: parent.nextY();break;\"+\n";
      _sJavaScript
+="\"case84: document.forms[0].today.click();break;}
window.event.keyCode=0; window.event.returnValue=false;}
\"+\n";
      _sJavaScript
+="\"function dragStart(){cx=window.event.clientX; cy=window.event.clientY; drag=true;}</scr\"+\"ipt>\"}\n";
      _sJavaScript
+="strIframe += \"<select name=tmpYearSelect  onblur='parent.hiddenSelect(this)'style='z-index:1;position:absolute;top:3;left:18;display:none'\"+\n";
      _sJavaScript
+="\"onchange='parent.WebCalendar.thisYear =this.value; parent.hiddenSelect(this); parent.writeCalendar();'></select>\"+\n";
      _sJavaScript
+="\"<select name=tmpMonthSelect onblur='parent.hiddenSelect(this)'style='z-index:1; position:absolute;top:3;left:74;display:none'\"+\n";
      _sJavaScript
+="\"onchange='parent.WebCalendar.thisMonth=this.value; parent.hiddenSelect(this); parent.writeCalendar();'></select>\"+\n";
      _sJavaScript
+="\"<table id=tableMainclass=bg border=0cellspacing=2cellpadding=0>\"+\n";
      _sJavaScript
+="\"<tr><td width=140height=19bgcolor='\"+ WebCalendar.lightColor +\"'>\"+\n";
      _sJavaScript
+="\"<table width=140id=tableHead border=0cellspacing=1cellpadding=0><tr align=center>\"+\n";
      _sJavaScript
+="\"<td width=15height=19class=bg title='向前翻 1 月快捷键:←'style='cursor: hand'onclick='parent.prevM()'><b>&lt;</b></td>\"+\n";
      _sJavaScript
+="\"<td width=60id=meizzYearHead  title='点击此处选择年份'onclick='parent.funYearSelect(parseInt(this.innerText, 10))'\"+\n";
      _sJavaScript
+="\"onmouseover='this.bgColor=parent.WebCalendar.darkColor; this.style.color=parent.WebCalendar.lightColor'\"+\n";
      _sJavaScript
+="\"onmouseout='this.bgColor=parent.WebCalendar.lightColor; this.style.color=parent.WebCalendar.wordColor'></td>\"+\n";
      _sJavaScript
+="\"<td width=50id=meizzYearMonth title='点击此处选择月份'onclick='parent.funMonthSelect(parseInt(this.innerText, 10))'\"+\n";
      _sJavaScript
+="\"onmouseover='this.bgColor=parent.WebCalendar.darkColor; this.style.color=parent.WebCalendar.lightColor'\"+\n";
      _sJavaScript
+="\"onmouseout='this.bgColor=parent.WebCalendar.lightColor; this.style.color=parent.WebCalendar.wordColor'></td>\"+\n";
      _sJavaScript
+="\"<td width=15class=bg title='向后翻 1 月快捷键:→'onclick='parent.nextM()'style='cursor: hand'><b>&gt;</b></td></tr></table>\"+\n";
      _sJavaScript
+="\"</td></tr><tr><td height=20><table id=tableWeek border=1width=140cellpadding=0cellspacing=0\";\n";
      _sJavaScript
+="if(WebCalendar.drag){strIframe += \"onmousedown='dragStart()'onmouseup='drag=false'onmouseout='drag=false'\";}\n";
      _sJavaScript
+="strIframe += \"borderColorLight='\"+ WebCalendar.darkColor +\"'borderColorDark='\"+ WebCalendar.lightColor +\"'>\"+\n";
      _sJavaScript
+="\"<tr align=center><td height=20></td><td></td><td></td><td></td><td></td><td></td><td></td></tr></table>\"+\n";
      _sJavaScript
+="\"</td></tr><tr><td valign=top width=140bgcolor='\"+ WebCalendar.lightColor +\"'>\"+\n";
      _sJavaScript
+="\"<table id=tableDay height=120width=140border=0cellspacing=1cellpadding=0>\";\n";
      _sJavaScript
+="for(var x=0; x<5; x++){ strIframe += \"<tr>\";\n";
      _sJavaScript
+="for(var y=0; y<7; y++)  strIframe += \"<tdclass=outid='meizzDay\"+ (x*7+y) +\"'></td>\"; strIframe += \"</tr>\";}\n";
      _sJavaScript
+="strIframe += \"<tr>\";\n";
      _sJavaScript
+="for(var x=35; x<39; x++) strIframe += \"<tdclass=outid='meizzDay\"+ x +\"'></td>\";\n";
      _sJavaScript
+="strIframe +=\"<td colspan=3class=outtitle='\"+ WebCalendar.regInfo +\"'><input style='background-color: \"+\n";_sJavaScript+="WebCalendar.btnBgColor +\";cursor: hand; padding-top: 4px; width:100%; height:100%; border:0'οnfοcus='this.blur()'\"+\n";_sJavaScript+="\"type=button value='&nbsp; &nbsp; 关闭'onclick='parent.hiddenCalendar()'></td></tr></table>\"+\n";
      _sJavaScript
+="\"</td></tr><tr><td height=20width=140bgcolor='\"+ WebCalendar.lightColor +\"'>\"+\n";
      _sJavaScript
+="\"<table border=0cellpadding=1cellspacing=0width=140>\"+\n";
      _sJavaScript
+="\"<tr><td><input name=prevYear title='向前翻 1 年快捷键:↑'onclick='parent.prevY()'type=button value='&lt;&lt;'\"+\n";
      _sJavaScript
+="\"onfocus='this.blur()'style='meizz:expression(this.disabled=parent.WebCalendar.thisYear==1000)'><input\"+\n";
      _sJavaScript
+="\"onfocus='this.blur()'name=prevMonth title='向前翻 1 月快捷键:←'onclick='parent.prevM()'type=button value='&lt;&nbsp;'>\"+\n";
      _sJavaScript
+="\"</td><td align=center><input name=today type=button value='今天'onfocus='this.blur()'style='width: 50'title='当前日期快捷键:T'\"+\n";
   
      _sJavaScript
+="\"onclick="+ @"\"+"\""+"parent.returnDate(new Date().getDate() +'/'+ (new Date().getMonth() +1) +'/'+ new Date().getFullYear())";
//"    οnclick=      \      "     parent.returnDate(new Date().getDate() +'/'+ (new Date().getMonth() +1) +'/'+ new Date().getFullYear())_sJavaScript+=@"\"+"\""+">"+"\"+\n";
//\     "      >     " +_sJavaScript+="\"</td><td align=right><input title='向后翻 1 月快捷键:→'name=nextMonth onclick='parent.nextM()'type=button value='&nbsp;&gt;'\"+\n";
      _sJavaScript
+="\"onfocus='this.blur()'><input name=nextYear title='向后翻 1 年快捷键:↓'onclick='parent.nextY()'type=button value='&gt;&gt;'\"+\n";
      _sJavaScript
+="\"onfocus='this.blur()'style='meizz:expression(this.disabled=parent.WebCalendar.thisYear==9999)'></td></tr></table>\"+\n";
      _sJavaScript
+="\"</td></tr><table></form></body></html>\";\n";
      _sJavaScript
+="with(WebCalendar.iframe)\n";
      _sJavaScript
+="{\n";
      _sJavaScript
+="document.writeln(strIframe); document.close();\n";
      _sJavaScript
+="for(var i=0; i<39; i++)\n";
      _sJavaScript
+="{\n";
      _sJavaScript
+="WebCalendar.dayObj[i] = eval(\"meizzDay\"+ i);\n";
      _sJavaScript
+="WebCalendar.dayObj[i].onmouseover = dayMouseOver;\n";
      _sJavaScript
+="WebCalendar.dayObj[i].onmouseout  = dayMouseOut;\n";
      _sJavaScript
+="WebCalendar.dayObj[i].onclick     = returnDate;\n";
      _sJavaScript
+="}\n";
      _sJavaScript
+="}\n";
      _sJavaScript
+="}\n";
      _sJavaScript
+="function WebCalendar() //初始化日历的设置\n";
      _sJavaScript
+="{\n";
      _sJavaScript
+="this.regInfo    = \"请单击选择日期&#13;关闭的快捷键:[Esc]\";\n";
      _sJavaScript
+="this.regInfo   += \"Ver1.0:FengXq Email:Fpsky2000@163.com\";\n";
      _sJavaScript
+="this.daysMonth  = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);\n";
      _sJavaScript
+="this.day        = new Array(39);            //定义日历展示用的数组\n";
      _sJavaScript
+="this.dayObj     = new Array(39);            //定义日期展示控件数组\n";
      _sJavaScript
+="this.dateStyle  = null;                     //保存格式化后日期数组\n";
      _sJavaScript
+="this.objExport  = null;                     //日历回传的显示控件\n";
      _sJavaScript
+="this.eventSrc   = null;                     //日历显示的触发控件\n";
      _sJavaScript
+="this.inputDate  = null;                     //转化外的输入的日期(d/m/yyyy)\n";
      _sJavaScript
+="this.thisYear   = new Date().getFullYear(); //定义年的变量的初始值\n";
      _sJavaScript
+="this.thisMonth  = new Date().getMonth()+ 1; //定义月的变量的初始值\n";
      _sJavaScript
+="this.thisDay    = new Date().getDate();     //定义日的变量的初始值\n";
      _sJavaScript
+="this.today      = this.thisDay +\"/\"+ this.thisMonth +\"/\"+ this.thisYear;   //今天(d/m/yyyy)\n";
      _sJavaScript
+="this.iframe     = window.frames(\"meizzCalendarIframe\"); //日历的 iframe 载体\n";
      _sJavaScript
+="this.calendar   = getObjectById(\"meizzCalendarLayer\");  //日历的层\n";
      _sJavaScript
+="this.dateReg    = \"\";           //日历格式验证的正则式\n";
      _sJavaScript
+="this.yearFall   = 50;           //定义年下拉框的年差值\n";
      _sJavaScript
+="this.format     = \"yyyy-mm-dd\"; //回传日期的格式\n";
      _sJavaScript
+="this.timeShow   = false;        //是否返回时间\n";
      _sJavaScript
+="this.drag       = true;         //是否允许拖动\n";
      _sJavaScript
+="this.darkColor  = \"#97BAE2\";    //控件的暗色\n";
      _sJavaScript
+="this.lightColor = \"#FFFFFF\";    //控件的亮色\n";
      _sJavaScript
+="this.btnBgColor = \"#E6E6FA\";    //控件的按钮背景色\n";
      _sJavaScript
+="this.wordColor  = \"#000080\";    //控件的文字颜色\n";
      _sJavaScript
+="this.wordDark   = \"#DCDCDC\";    //控件的暗文字颜色\n";
      _sJavaScript
+="this.dayBgColor = \"#F5F5FA\";    //日期数字背景色\n";
      _sJavaScript
+="this.todayColor = \"#FF0000\";    //今天在日历上的标示背景色\n";
      _sJavaScript
+="this.DarkBorder = \"#D4D0C8\";    //日期显示的立体表达色\n";
      _sJavaScript
+="}\n";
      _sJavaScript
+="var WebCalendar = new WebCalendar();\n";
      _sJavaScript
+="function calendar() //主调函数\n";
      _sJavaScript
+="{\n";
      _sJavaScript
+="var e = window.event.srcElement;   writeIframe();\n";
      _sJavaScript
+="var o = WebCalendar.calendar.style; WebCalendar.eventSrc = e;\n";
      _sJavaScript
+="if (arguments.length == 0) WebCalendar.objExport = e;\n";
      _sJavaScript
+="else WebCalendar.objExport = eval(arguments[0]);\n";
      _sJavaScript
+="WebCalendar.iframe.tableWeek.style.cursor = WebCalendar.drag ? \"move\": \"default\";\n";
      _sJavaScript
+="var t = e.offsetTop,  h = e.clientHeight, l = e.offsetLeft, p = e.type;\n";
      _sJavaScript
+="while (e = e.offsetParent){t += e.offsetTop; l += e.offsetLeft;}\n";
      _sJavaScript
+="o.display = \"\"; WebCalendar.iframe.document.body.focus();\n";
      _sJavaScript
+="var cw = WebCalendar.calendar.clientWidth, ch = WebCalendar.calendar.clientHeight;\n";
      _sJavaScript
+="var dw = document.body.clientWidth, dl = document.body.scrollLeft, dt = document.body.scrollTop;\n";
      _sJavaScript
+="if (document.body.clientHeight + dt - t - h >= ch) o.top = (p==\"image\")? t + h : t + h + 6;\n";
      _sJavaScript
+="else o.top  = (t - dt < ch) ? ((p==\"image\")? t + h : t + h + 6) : t - ch;\n";
      _sJavaScript
+="if (dw + dl - l >= cw) o.left = l; else o.left = (dw >= cw) ? dw - cw + dl : dl;\n";
   
      _sJavaScript
+=@"if  (!WebCalendar.timeShow) WebCalendar.dateReg = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/;"+"\n";
//if  (!WebCalendar.timeShow) WebCalendar.dateReg = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/;_sJavaScript+=@"else WebCalendar.dateReg = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/;"+"\n";
//else WebCalendar.dateReg = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/;      _sJavaScript+="try{\n";
      _sJavaScript
+="if (WebCalendar.objExport.value.trim() != \"\"){\n";    
      _sJavaScript
+="WebCalendar.dateStyle = WebCalendar.objExport.value.trim().match(WebCalendar.dateReg);\n";
      _sJavaScript
+="if (WebCalendar.dateStyle == null)\n";
      _sJavaScript
+="{\n";
      _sJavaScript
+="WebCalendar.thisYear   = new Date().getFullYear();\n";
      _sJavaScript
+="WebCalendar.thisMonth  = new Date().getMonth()+ 1;\n";
      _sJavaScript
+="WebCalendar.thisDay    = new Date().getDate();\n";
      _sJavaScript
+="alert(\"原文本框里的日期有错误!可能与你定义的显示时分秒有冲突!\");\n";
      _sJavaScript
+="writeCalendar(); return false;\n";
      _sJavaScript
+="}\n";
      _sJavaScript
+="else\n";
      _sJavaScript
+="{\n";
      _sJavaScript
+="WebCalendar.thisYear   = parseInt(WebCalendar.dateStyle[1], 10);\n";
      _sJavaScript
+="WebCalendar.thisMonth  = parseInt(WebCalendar.dateStyle[3], 10);\n";
      _sJavaScript
+="WebCalendar.thisDay    = parseInt(WebCalendar.dateStyle[4], 10);\n";
      _sJavaScript
+="WebCalendar.inputDate  = parseInt(WebCalendar.thisDay, 10) +\"/\"+ parseInt(WebCalendar.thisMonth, 10) +\"/\"+ \n";
      _sJavaScript
+="parseInt(WebCalendar.thisYear, 10); writeCalendar();\n";
      _sJavaScript
+="}\n";
      _sJavaScript
+="}  else writeCalendar();\n";
      _sJavaScript
+="}\n";
      _sJavaScript
+="catch(e){writeCalendar();}\n";
      _sJavaScript
+="}\n";
      _sJavaScript
+="function funMonthSelect() //月份的下拉框\n";
      _sJavaScript
+="{\n";
      _sJavaScript
+="var m = isNaN(parseInt(WebCalendar.thisMonth, 10)) ? new Date().getMonth() + 1 : parseInt(WebCalendar.thisMonth);\n";
      _sJavaScript
+="var e = WebCalendar.iframe.document.forms[0].tmpMonthSelect;\n";
      _sJavaScript
+="for (var i=1; i<13; i++) e.options.add(new Option(i +\"月\", i));\n";
      _sJavaScript
+="e.style.display = \"\"; e.value = m; e.focus(); window.status = e.style.top;\n";
      _sJavaScript
+="}\n";
      _sJavaScript
+="function funYearSelect() //年份的下拉框\n";
      _sJavaScript
+="{\n";
      _sJavaScript
+="var n = WebCalendar.yearFall;\n";
      _sJavaScript
+="var e = WebCalendar.iframe.document.forms[0].tmpYearSelect;\n";
      _sJavaScript
+="var y = isNaN(parseInt(WebCalendar.thisYear, 10)) ? new Date().getFullYear() : parseInt(WebCalendar.thisYear);\n";
      _sJavaScript
+="y = (y <= 1000)? 1000 : ((y >= 9999)? 9999 : y);\n";
      _sJavaScript
+="var min = (y - n >= 1000) ? y - n : 1000;\n";
      _sJavaScript
+="var max = (y + n <= 9999) ? y + n : 9999;\n";
      _sJavaScript
+="min = (max == 9999) ? max-n*2 : min;\n";
      _sJavaScript
+="max = (min == 1000) ? min+n*2 : max;\n";
      _sJavaScript
+="for (var i=min; i<=max; i++) e.options.add(new Option(i +\"年\", i));\n";
      _sJavaScript
+="e.style.display = \"\"; e.value = y; e.focus();\n";
      _sJavaScript
+="}\n";
      _sJavaScript
+="function prevM()  //往前翻月份\n";
      _sJavaScript
+="{\n";
      _sJavaScript
+="WebCalendar.thisDay = 1;\n";
      _sJavaScript
+="if (WebCalendar.thisMonth==1)\n";
      _sJavaScript
+="{\n";
      _sJavaScript
+="WebCalendar.thisYear--;\n";
      _sJavaScript
+="WebCalendar.thisMonth=13;\n";
      _sJavaScript
+="}\n";
      _sJavaScript
+="WebCalendar.thisMonth--; writeCalendar();\n";
      _sJavaScript
+="}\n";
      _sJavaScript
+="function nextM()  //往后翻月份\n";
      _sJavaScript
+="{\n";
      _sJavaScript
+="WebCalendar.thisDay = 1;\n";
      _sJavaScript
+="if (WebCalendar.thisMonth==12)\n";
      _sJavaScript
+="{\n";
      _sJavaScript
+="WebCalendar.thisYear++;\n";
      _sJavaScript
+="WebCalendar.thisMonth=0;\n";
      _sJavaScript
+="}\n";
      _sJavaScript
+="WebCalendar.thisMonth++; writeCalendar();\n";
      _sJavaScript
+="}\n";
      _sJavaScript
+="function prevY(){WebCalendar.thisDay = 1; WebCalendar.thisYear--; writeCalendar();}//往前翻 Year\n";
      _sJavaScript
+="function nextY(){WebCalendar.thisDay = 1; WebCalendar.thisYear++; writeCalendar();}//往后翻 Year\n";
      _sJavaScript
+="function hiddenSelect(e){for(var i=e.options.length; i>-1; i--)e.options.remove(i); e.style.display=\"none\";}\n";
      _sJavaScript
+="function getObjectById(id){ if(document.all) return(eval(\"document.all.\"+ id)); return(eval(id)); }\n";
      _sJavaScript
+="function hiddenCalendar(){getObjectById(\"meizzCalendarLayer\").style.display = \"none\";};\n";
      _sJavaScript
+="function appendZero(n){return((\"00\"+ n).substr((\"00\"+ n).length-2));}//日期自动补零程序\n";
      _sJavaScript
+="function String.prototype.trim()\n";
      _sJavaScript
+="{\n";
      _sJavaScript
+="return this.replace(/(^"+@"\"+"s*)|("+@"\"+"s*$)"+@"/"+"g,\"\");}\n";
//return this.replace(/(^      \     s*)|(      \     s*$)      /     g, " ");}_sJavaScript+="function dayMouseOver()\n";
      _sJavaScript
+="{\n";
      _sJavaScript
+="this.className = \"over\";\n";
      _sJavaScript
+="this.style.backgroundColor = WebCalendar.darkColor;\n";
      _sJavaScript
+="if(WebCalendar.day[this.id.substr(8)].split(\"/\")[1] == WebCalendar.thisMonth)\n";
      _sJavaScript
+="this.style.color = WebCalendar.lightColor;\n";
      _sJavaScript
+="}\n";
      _sJavaScript
+="function dayMouseOut()\n";
      _sJavaScript
+="{\n";
      _sJavaScript
+="this.className = \"out\"; var d = WebCalendar.day[this.id.substr(8)], a = d.split(\"/\");\n";
      _sJavaScript
+="this.style.removeAttribute('backgroundColor');\n";
      _sJavaScript
+="if(a[1] == WebCalendar.thisMonth && d != WebCalendar.today)\n";
      _sJavaScript
+="{\n";
      _sJavaScript
+="if(WebCalendar.dateStyle && a[0] == parseInt(WebCalendar.dateStyle[4], 10))\n";
      _sJavaScript
+="this.style.color = WebCalendar.lightColor;\n";
      _sJavaScript
+="this.style.color = WebCalendar.wordColor;\n";
      _sJavaScript
+="}\n";
      _sJavaScript
+="}\n";
      _sJavaScript
+="function writeCalendar() //对日历显示的数据的处理程序\n";
      _sJavaScript
+="{\n";
      _sJavaScript
+="var y = WebCalendar.thisYear;\n";
      _sJavaScript
+="var m = WebCalendar.thisMonth; \n";
      _sJavaScript
+="var d = WebCalendar.thisDay;\n";
      _sJavaScript
+="WebCalendar.daysMonth[1] = (0==y%4 && (y%100!=0 || y%400==0)) ? 29 : 28;\n";
      _sJavaScript
+="if (!(y<=9999 && y >= 1000 && parseInt(m, 10)>0 && parseInt(m, 10)<13 && parseInt(d, 10)>0)){\n";
      _sJavaScript
+="alert(\"对不起,你输入了错误的日期!\");\n";
      _sJavaScript
+="WebCalendar.thisYear   = new Date().getFullYear();\n";
      _sJavaScript
+="WebCalendar.thisMonth  = new Date().getMonth()+ 1;\n";
      _sJavaScript
+="WebCalendar.thisDay    = new Date().getDate(); }\n";
      _sJavaScript
+="y = WebCalendar.thisYear;\n";
      _sJavaScript
+="m = WebCalendar.thisMonth;\n";
      _sJavaScript
+="d = WebCalendar.thisDay;\n";
      _sJavaScript
+="WebCalendar.iframe.meizzYearHead.innerText  = y +\"年\";\n";
      _sJavaScript
+="WebCalendar.iframe.meizzYearMonth.innerText = parseInt(m, 10) +\"月\";\n";
      _sJavaScript
+="WebCalendar.daysMonth[1] = (0==y%4 && (y%100!=0 || y%400==0)) ? 29 : 28; //闰年二月为29天\n";
      _sJavaScript
+="var w = new Date(y, m-1, 1).getDay();\n";
      _sJavaScript
+="var prevDays = m==1  ? WebCalendar.daysMonth[11] : WebCalendar.daysMonth[m-2];\n";
      _sJavaScript
+="for(var i=(w-1); i>=0; i--) //这三个 for 循环为日历赋数据源(数组 WebCalendar.day)格式是 d/m/yyyy\n";
      _sJavaScript
+="{\n";
      _sJavaScript
+="WebCalendar.day[i] = prevDays +\"/\"+ (parseInt(m, 10)-1) +\"/\"+ y;\n";
      _sJavaScript
+="if(m==1) WebCalendar.day[i] = prevDays +\"/\"+ 12 +\"/\"+ (parseInt(y, 10)-1);\n";
      _sJavaScript
+="prevDays--;\n";
      _sJavaScript
+="}\n";
      _sJavaScript
+="for(var i=1; i<=WebCalendar.daysMonth[m-1]; i++) WebCalendar.day[i+w-1] = i +\"/\"+ m +\"/\"+ y;\n";
      _sJavaScript
+="for(var i=1; i<39-w-WebCalendar.daysMonth[m-1]+1; i++)\n";
      _sJavaScript
+="{\n";
      _sJavaScript
+="WebCalendar.day[WebCalendar.daysMonth[m-1]+w-1+i] = i +\"/\"+ (parseInt(m, 10)+1) +\"/\"+ y;\n";
      _sJavaScript
+="if(m==12) WebCalendar.day[WebCalendar.daysMonth[m-1]+w-1+i] = i +\"/\"+ 1 +\"/\"+ (parseInt(y, 10)+1);\n";
      _sJavaScript
+="}\n";
      _sJavaScript
+="for(var i=0; i<39; i++)    //这个循环是根据源数组写到日历里显示\n";
      _sJavaScript
+="{\n";
      _sJavaScript
+="var a = WebCalendar.day[i].split(\"/\");\n";
      _sJavaScript
+="WebCalendar.dayObj[i].innerText    = a[0];\n";
      _sJavaScript
+="WebCalendar.dayObj[i].title        = a[2] +\"-\"+ appendZero(a[1]) +\"-\"+ appendZero(a[0]);\n";
      _sJavaScript
+="WebCalendar.dayObj[i].bgColor      = WebCalendar.dayBgColor;\n";
      _sJavaScript
+="WebCalendar.dayObj[i].style.color  = WebCalendar.wordColor;\n";
      _sJavaScript
+="if ((i<10 && parseInt(WebCalendar.day[i], 10)>20) || (i>27 && parseInt(WebCalendar.day[i], 10)<12))\n";
      _sJavaScript
+="WebCalendar.dayObj[i].style.color = WebCalendar.wordDark;\n";
      _sJavaScript
+="if (WebCalendar.inputDate==WebCalendar.day[i])    //设置输入框里的日期在日历上的颜色\n";
      _sJavaScript
+="{WebCalendar.dayObj[i].bgColor = WebCalendar.darkColor; WebCalendar.dayObj[i].style.color = WebCalendar.lightColor;}\n";
      _sJavaScript
+="if (WebCalendar.day[i] == WebCalendar.today)      //设置今天在日历上反应出来的颜色\n";
      _sJavaScript
+="{WebCalendar.dayObj[i].bgColor = WebCalendar.todayColor; WebCalendar.dayObj[i].style.color = WebCalendar.lightColor;}\n";
      _sJavaScript
+="}\n";
      _sJavaScript
+="}\n";
      _sJavaScript
+="function returnDate() //根据日期格式等返回用户选定的日期\n";
      _sJavaScript
+="{\n";
      _sJavaScript
+="if(WebCalendar.objExport)\n";
      _sJavaScript
+="{\n";
      _sJavaScript
+="var returnValue;\n";
      _sJavaScript
+="var a = (arguments.length==0) ? WebCalendar.day[this.id.substr(8)].split(\"/\") : arguments[0].split(\"/\");\n";
      _sJavaScript
+="var d = WebCalendar.format.match(/^("+@"\"+"w{4})(-|"+@"\"+"/)("+@"\"+"w{1,2})"+@"\"+"2("+@"\"+"w{1,2})$/);\n";
//var d = WebCalendar.format.match(/^(      \    w{4})(-|     \     /)(     \     w{1,2})     \     2(     \   w{1,2})$/);_sJavaScript+="if(d==null){alert(\"你设定的日期输出格式不对!请重新定义 WebCalendar.format !\"); return false;}\n";
      _sJavaScript
+="var flag = d[3].length==2 || d[4].length==2; //判断返回的日期格式是否要补零\n";
      _sJavaScript
+="returnValue = flag ? a[2] +d[2]+ appendZero(a[1]) +d[2]+ appendZero(a[0]) : a[2] +d[2]+ a[1] +d[2]+ a[0];\n";
      _sJavaScript
+="if(WebCalendar.timeShow)\n";
      _sJavaScript
+="{\n";
      _sJavaScript
+="var h = new Date().getHours(), m = new Date().getMinutes(), s = new Date().getSeconds();\n";
      _sJavaScript
+="returnValue += flag ? \"\"+ appendZero(h) +\":\"+ appendZero(m) +\":\"+ appendZero(s) : \"\"+  h  +\":\"+ m +\":\"+ s;\n";
      _sJavaScript
+="}\n";
      _sJavaScript
+="WebCalendar.objExport.value = returnValue;\n";
      _sJavaScript
+="hiddenCalendar();\n";
      _sJavaScript
+="}\n";
      _sJavaScript
+="}\n";
      _sJavaScript
+="function document.onclick()\n";
      _sJavaScript
+="{\n";
      _sJavaScript
+="if(WebCalendar.eventSrc != window.event.srcElement) hiddenCalendar();\n";
      _sJavaScript
+="}\n";
      _sJavaScript
+="-->\n";
      _sJavaScript
+="</script>\n";
      _sJavaScript
+="\n";

    }


#endregion

override_Function#regionoverride_Function
/**////<summary>///重写函数,处理控件的回发事件
///</summary>

publicvirtualboolLoadPostData(stringpostDataKey,NameValueCollection values) 
{
      String presentValue
=_Text;
      String postedValue
=values[postDataKey];
if(!presentValue.Equals(postedValue))
{
        _Text
=postedValue;
returntrue;
      }
returnfalse;
    }

publicvirtualvoidRaisePostDataChangedEvent() 
{
        
    }

/**////<summary>///重写OnPreRender(),对控件进行初始化设置
///</summary>

protectedoverridevoidOnPreRender(EventArgs e)
{
//设置默认日期:当前日期if(_DefaultDate==true)
{
//_Text = System.DateTime.Now.Year.ToString() + "-" + System.DateTime.Now.Month.ToString() + "-" + System.DateTime.Now.Day.ToString();_Text=System.DateTime.Now.Date.ToString("yyyy-MM-dd");
   
      }
    }

/**////<summary>///重写Render函数,用Html代码输出控件
///</summary>

protectedoverridevoidRender( HtmlTextWriter writer)
{
string_strTextBoxClass="";
string_strButtonClass="";

//生成输出Html控件代码_sOutput_Html="";
      _sOutput_Html
+="\n";

//设置样式if(_TextBoxClass!="")
{
        _strTextBoxClass
="class = '"+_TextBoxClass+"'";
      }
if(_ButtonClass!="")
{
        _strButtonClass
="class = '"+_ButtonClass+"'";
      }

      _sOutput_Html
+="<input type='text' name='"+this.UniqueID+"' size='7'"+_strTextBoxClass+"value='"+_Text+"' runat='server' >\n";   
      _sOutput_Html
+="<input"+_strButtonClass+"type=button value='' οnclick='calendar("+this.UniqueID+")'>\n";

//生成JavaScript脚本
//判断JavaScript脚本是否已经在客户端注册,if(Page.IsClientScriptBlockRegistered(_sJavaScript_ID))
{
//已注册,不重复输出角本到客户端}
else{
        _MakeJavaScript();
        _sOutput_Html
+=_sJavaScript;   
      }

//在客户端注册JavaScript脚本Page.RegisterClientScriptBlock(_sJavaScript_ID,_sJavaScript);

      writer.Write(_sOutput_Html);

    }

#endregion


  }
}

转载于:https://www.cnblogs.com/Titans/archive/2006/09/15/504892.html

日历控件源码开放--适用于ASP.NET 1.1相关推荐

  1. 农历控件源码(C#)

    C#农历控件源码 using System; namespace CNCalendar { public class CNDate { private const ushort START_YEAR ...

  2. Pdf文档在线编辑控件源码及演示

    支持Pdf文档在线编辑,并可以进行另存管理. PdfTestSite为演示文件夹 PdfViewer为控件源码控件 test.pdf为模版文件 注意:服务器端需要安装Adobe Reader以便进行更 ...

  3. Android-UI 超级优良超级多超级强大开源控件源码demo

    第一部分 个性化控件(View) 主要介绍那些不错个性化的View,包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.Pro ...

  4. Android之PullToRefresh控件源码解析

    转载请标明出处: http://blog.csdn.net/hai_qing_xu_kong/article/details/73802453 本文出自:[顾林海的博客] 个人开发的微信小程序,目前功 ...

  5. QT学习之经典控件源码(如此强大)

    进来好好学习了QT,研究了很多别人的源码,在绘图方面原来QT也是如此强大!                                             源码下载: /Files/feiya ...

  6. Android SwipeRefreshLayout下拉刷新控件源码简单分析

    咱们在做Android APP开发的时候经常碰到有下拉刷新和上拉加载跟多的需求,这篇文章咱们先说说下来刷新,咱们就以google的原生的下拉刷新控件SwipeRefreshLayout来看看大概的实现 ...

  7. PhotoView图片缩放控件源码浅析(一)

    本文参考自http://www.tuicool.com/articles/ea2ANjm 简介 PhotoView属性:  可以用于查看图片,并对图片进行拖动缩放,拖动过程中不会出现边缘空白:  双击 ...

  8. PowerBuilder 9日历控件展示,下载(附带源码)

    下载地址:https://download.csdn.net/download/weixin_37914760/11444539 1.pb9日历控件,支持多个日期选择

  9. 9款精致HTML5/jQuery日历时钟控件源码下载(源码请见百度云) 链接:http://pan.baidu.com/s/1geIXe75 密码:7m4a...

    现在的网页应用越来越丰富,我们在网页中填写日期和时间已经再也不用手动输入了,而是使用各种各样的日期时间选择控件,大部分样式华丽的日期选择和日历控件都是基于jQuery和HTML5的,比如今天要分享的这 ...

最新文章

  1. 前置交换机数据交换_我们的数据科学交换所
  2. LeetCode 5843. 作为子字符串出现在单词中的字符串数目
  3. Symbian和C++ SDK开发入门之部署
  4. 3-1:常见任务和主要工具之软件包管理
  5. android系统性能优化(63)---Android APP 卡顿问题分析及解决方案
  6. java二级考试真题_计算机等级考试真题2(JAVA)
  7. 做真正Hacker 的乐趣──自己动手去实践
  8. 素数猜想对 c语言,1007 素数对猜想 (20 分)(C语言实现)
  9. STM32CubeIDE Audio播放音频 WM8978 + I2S + DMA双缓存模式
  10. 【语言-c#】应用程序正常初始化(0xc000007b)失败。请单击“确定”,终止应用程序。
  11. Arcgis10.8中将三维的高程点转换为二维的高程点
  12. Error: unable to connect to node rabbit@localhost: nodedown 创建消息队列用户报错
  13. 阿里云上部署的SQL Server服务器和SVN服务器不能远程访问
  14. bcdedit用法详解
  15. Coursera普林斯顿大学算法下Week4:Boggle 拼字游戏
  16. ATFX:美国9月PCE物价指数晚间发布,会出现意外吗?
  17. 专偷密码的“偷密婆” 疯狂盗取QQ帐号
  18. DSP第一次上机作业
  19. 基于有理逼近算法的序列密码的有理分数表示(全国高校数学密码挑战赛)
  20. 玩家角色信息是保存在服务器上吗,Reworld使用存储服务存储玩家的数据

热门文章

  1. layui 自定义排序_thinkphp5+layui异步修改排序
  2. 编译原理lr(0)c语言,关于编译原理:LR(1)LR(0)文法判断?
  3. 打开指定摄像头_我在无人区深处,遇到了一个高清摄像头
  4. python增量爬虫_python爬虫Scrapy框架之增量式爬虫
  5. 利用Matlab求解线性规划问题
  6. conda(pip) bad interpreter的解决办法
  7. jdbc oracle添加数据库连接,JDBC与Oracle数据库连接最常用方法
  8. python多维数据存储_在Python中存储和重新加载大型多维数据集
  9. 图解HTTP学习笔记
  10. 2.boost遍历数组容器