📄 inputcalendar.cs
字号:
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
using System.Collections;
using System.Collections.Specialized;
namespace WebControlLibrary
{
/// <summary>
/// InputCalendar 的摘要说明。
/// 日历选择控件(可能出现与用页javascript函数重名或Id重复的问题)
/// 2.0.0(解决了会被select遮挡的问题)
/// </summary>
[DefaultProperty("Text"),
ToolboxData("<{0}:InputCalendar runat=server></{0}:InputCalendar>")]
public class InputCalendar : System.Web.UI.WebControls.WebControl, IPostBackDataHandler
{
//private string size;
private string size;
[Bindable(true),
Category("Appearance"),
DefaultValue("")]
public string Text
{
get
{
if (ViewState["Text"] != null)
{
return ViewState["Text"].ToString();
}
else
{
return null;
}
}
set
{
ViewState["Text"] = value;
}
}
[Bindable(true),
Category("Appearance"),
DefaultValue("")]
public string Size
{
get
{
return size;
}
set
{
size = value;
}
}
/// <summary>
/// 将此控件呈现给指定的输出参数。
/// </summary>
/// <param name="output"> 要写出到的 HTML 编写器 </param>
protected override void Render(HtmlTextWriter output)
{
output.AddAttribute(HtmlTextWriterAttribute.Id,this.ID);
output.AddAttribute(HtmlTextWriterAttribute.Name,this.ID);
if (this.CssClass != ""){output.AddAttribute(HtmlTextWriterAttribute.Class,this.CssClass);}
if (this.Text != "" && this.Text != null){output.AddAttribute(HtmlTextWriterAttribute.Value,this.Text);}
if (this.Size != "" && this.Size != null){output.AddAttribute(HtmlTextWriterAttribute.Size,this.Size);}
output.AddAttribute(HtmlTextWriterAttribute.Style,"cursor:hand");
output.AddAttribute(HtmlTextWriterAttribute.Type,"text");
output.AddAttribute(HtmlTextWriterAttribute.ReadOnly,"true");
output.AddAttribute(HtmlTextWriterAttribute.Onclick,"javascript:this.focus()");
output.AddAttribute("onFocus","fPopCalendar(this,this,PopCal); return false;");
output.RenderBeginTag(HtmlTextWriterTag.Input);
output.RenderEndTag();
if(!this.Page.IsClientScriptBlockRegistered("clientScript"))
{
output.WriteLine("<script language=\"JavaScript\">");
output.WriteLine("var gdCtrl = new Object();");
output.WriteLine("var gcGray = \"#808080\";"); //非当前月应有日期字的颜色
output.WriteLine("var gcToggle = \"highlight\";"); //鼠标所在日期单元格的底色
output.WriteLine("var gcBG = \"threedface\";"); //日历背景色
output.WriteLine("var gMonths = new Array(\"一月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"十一月\",\"十二月\");");
output.WriteLine("var gdCurDate = new Date();"); //gdCurDate--当前日期
output.WriteLine("var giYear = gdCurDate.getFullYear();"); //giYear--当前年份
output.WriteLine("var giMonth = gdCurDate.getMonth()+1;"); //giMonth--当前月份(因为getMonth()返回的是0-11间的整数,故当前月要加1)
output.WriteLine("var giDay = gdCurDate.getDate();"); //giDay--当前日
output.WriteLine("var sxYear = giYear;"); //sxYear--所选年份
output.WriteLine("var sxMonth = giMonth;"); //sxMonth--所选月份
output.WriteLine("var sxDay = giDay;"); //sxDay--所选日
output.WriteLine("var sxDatestr = gdCtrl.value;"); //以前所选日期
output.WriteLine("if (sxDatestr != \"\"){");
output.WriteLine("var sxDate = new Date(sxDatestr);");
output.WriteLine("sxYear = sxDate.getFullYear();");
output.WriteLine("}");
output.WriteLine("var VicPopCal = new Object();");
#region 鼠标异动到某对象上的一系列函数
output.WriteLine("function mouseover(obj){");
output.WriteLine("obj.style.borderTop = 'buttonshadow 1px solid';");
output.WriteLine("obj.style.borderLeft = 'buttonshadow 1px solid';");
output.WriteLine("obj.style.borderRight = 'buttonhighlight 1px solid';");
output.WriteLine("obj.style.borderBottom = 'buttonhighlight 1px solid';");
output.WriteLine("}");
output.WriteLine("function mouseout(obj){");
output.WriteLine("obj.style.borderTop = 'buttonhighlight 1px solid';");
output.WriteLine("obj.style.borderLeft = 'buttonhighlight 1px solid';");
output.WriteLine("obj.style.borderRight = 'buttonshadow 1px solid';");
output.WriteLine("obj.style.borderBottom = 'buttonshadow 1px solid';");
output.WriteLine("}");
output.WriteLine("function mousedown(obj){");
output.WriteLine("obj.style.borderTop = 'buttonshadow 1px solid';");
output.WriteLine("obj.style.borderLeft = 'buttonshadow 1px solid';");
output.WriteLine("obj.style.borderRight = 'buttonhighlight 1px solid';");
output.WriteLine("obj.style.borderBottom = 'buttonhighlight 1px solid';");
output.WriteLine("}");
output.WriteLine("function mouseup(obj){");
output.WriteLine("obj.style.borderTop = 'buttonhighlight 1px solid';");
output.WriteLine("obj.style.borderLeft = 'buttonhighlight 1px solid';");
output.WriteLine("obj.style.borderRight = 'buttonshadow 1px solid';");
output.WriteLine("obj.style.borderBottom = 'buttonshadow 1px solid';");
output.WriteLine("}");
#endregion
#region 日历操作的一系列函数
output.WriteLine("function fPopCalendar(popCtrl, dateCtrl, popCal){");
output.WriteLine("parent.event.cancelBubble=true;");
output.WriteLine("VicPopCal = popCal;");
output.WriteLine("gdCtrl = dateCtrl;");
output.WriteLine("fSetYearMon(giYear, giMonth);");
output.WriteLine("var point = fGetXY(popCtrl);");
output.WriteLine("with (VicPopCal.style) {left = point.x;top = point.y+popCtrl.offsetHeight+1;visibility = 'visible';}");
output.WriteLine("VicPopCal.focus();");
output.WriteLine("}");
output.WriteLine("function fSetDate(iYear, iMonth, iDay){");
output.WriteLine("if ((iYear == 0) && (iMonth == 0) && (iDay == 0)){");
output.WriteLine("gdCtrl.value = \"\";");
output.WriteLine("}");
output.WriteLine("else{");
output.WriteLine("if (iMonth < 10){iMonth = \"0\"+iMonth;}"); //规格化时间
output.WriteLine("if (iDay < 10){iDay = \"0\"+iDay;}");
output.WriteLine("gdCtrl.value = iYear+\"-\"+iMonth+\"-\"+iDay;");
output.WriteLine("}");
output.WriteLine("VicPopCal.style.visibility = \"hidden\";");
output.WriteLine("}");
output.WriteLine("function fSetSelected(aCell){");
output.WriteLine("var iOffset = 0;");
output.WriteLine("var iYear = parseInt(document.all.tbSelYear.value);");
output.WriteLine("var iMonth = parseInt(document.all.tbSelMonth.value);");
output.WriteLine("aCell.bgColor = gcBG;");
output.WriteLine("with (aCell.children[\"cellText\"]){");
output.WriteLine("var iDay = parseInt(innerText);");
output.WriteLine("if (color==gcGray){iOffset = (Victor<10)?-1:1;}");
output.WriteLine("iMonth += iOffset;");
output.WriteLine("if (iMonth<1) { iYear--; iMonth = 12;}else{if (iMonth>12){iYear++;iMonth = 1;}}");
output.WriteLine("}");
output.WriteLine("fSetDate(iYear, iMonth, iDay);");
output.WriteLine("}");
output.WriteLine("function Point(iX, iY){this.x = iX;this.y = iY;}");
output.WriteLine("function fBuildCal(iYear, iMonth){");
output.WriteLine("var aMonth=new Array();");
output.WriteLine("for(i=1;i<7;i++){aMonth[i]=new Array(i);}");
output.WriteLine("var dCalDate=new Date(iYear, iMonth-1, 1);");
output.WriteLine("var iDayOfFirst=dCalDate.getDay();");
output.WriteLine("var iDaysInMonth=new Date(iYear, iMonth, 0).getDate();");
output.WriteLine("var iOffsetLast=new Date(iYear, iMonth-1, 0).getDate()-iDayOfFirst+1;");
output.WriteLine("var iDate = 1;");
output.WriteLine("var iNext = 1;");
output.WriteLine("for (d = 0; d < 7; d++){aMonth[1][d] = (d<iDayOfFirst)?-(iOffsetLast+d):iDate++;}");
output.WriteLine("for (w = 2; w < 7; w++){for (d = 0; d < 7; d++){aMonth[w][d] = (iDate<=iDaysInMonth)?iDate++:-(iNext++);}}");
output.WriteLine("return aMonth;");
output.WriteLine("}");
output.WriteLine("function fDrawCal(iYear, iMonth, iDay, iCellWidth, iDateTextSize) {");
output.WriteLine("var WeekDay = new Array(\"日\",\"一\",\"二\",\"三\",\"四\",\"五\",\"六\");");
output.WriteLine("var styleTD = \" bgcolor='\"+gcBG+\"' width='\"+iCellWidth+\"' bordercolor='\"+gcBG+\"' valign='middle' align='center' style='font-size: 12px;background: buttonface;border-top: buttonhighlight 1px solid;border-left: buttonhighlight 1px solid;border-right: buttonshadow 1px solid; border-bottom: buttonshadow 1px solid;\";");
output.WriteLine("with (document) {");
output.WriteLine("write(\"<tr align='center'>\");");
output.WriteLine("for(i=0; i<7; i++){write(\"<td height='20' \"+styleTD+\"color:#990099' >\" + WeekDay[i] + \"</td>\");}");
output.WriteLine("write(\"</tr>\");");
output.WriteLine("for (w = 1; w < 7; w++) {");
output.WriteLine("write(\"<tr align='center'>\");");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -