最近在学习写控件,从最简单的日期选择器开始。
共有如下几个属性:
Minyear:最小年份
Maxyear:最大年份
Theme:样式
代码如下:
Code
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Web;
using System.Drawing;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
namespace Calendar
{
[ToolboxData("<{0}:calendar runat=\"server\"></{0}:calendar>")]
public class calendar : TextBox
{
private int _minyear = 1900;
private int _maxyear = 2999;
[Browsable(true)]
[Description("最小年份")]
[DefaultValue("1900")]
[Category("设定")]
public virtual int Minyear
{
get { return _minyear; }
set { _minyear = value; }
}
[Browsable(true)]
[Description("最大年份")]
[DefaultValue("2999")]
[Category("设定")]
public virtual int Maxyear
{
get { return _maxyear; }
set { _maxyear = value; }
}
[Browsable(true)]
[Description("样式设置")]
[DefaultValue(0)]
[Category("设定")]
public calendarstyle Theme
{
get
{
if (this.ViewState["calendarstyle"] == null)
{
return calendarstyle.blue;
}
return (calendarstyle) this.ViewState["calendarstyle"];
}
set
{
this.ViewState["calendarstyle"] = value;
}
}
protected override void OnPreRender(EventArgs e)
{
this.Page.PreRenderComplete += new EventHandler(Page_PreRender);
this.Attributes.Add("onFocus", "return getcalendar('" + this.ID + "','" + this.ID + "','','" + Minyear + "','" + Maxyear + "')");
base.OnPreRender(e);
}
void Page_PreRender(object sender, EventArgs e)
{
Page.ClientScript.RegisterClientScriptResource(this.GetType(), "Calendar.javascript.calendar.js");
Page.ClientScript.RegisterClientScriptResource(this.GetType(), "Calendar.javascript.cn_utf8.js");
Page.ClientScript.RegisterClientScriptResource(this.GetType(), "Calendar.javascript.calendar-setup.js");
RegCss("Calendar.style." + Theme + ".css");
}
/// <summary>
/// 注册CSS样式表
/// </summary>
/// <param name="Path"></param>
private void RegCss(string Path)
{
HtmlGenericControl css = new HtmlGenericControl("link");
css.Attributes.Add("href", Page.ClientScript.GetWebResourceUrl(typeof(calendar), Path));
css.Attributes.Add("type", "text/css");
css.Attributes.Add("rel", "stylesheet");
Page.Header.Controls.Add(css);
}
}
public enum calendarstyle
{
blue,
brown,
green,
system,
tas,
win2k,
win2k_cold
}
}
不设置属性的时候,也就是默认属性的时候正常:<Fting:calendar ID="Calendar1" runat="server"></Fting:calendar>
可是选择属性后<Fting:calendar ID="Calendar1" runat="server" Theme="win2k"></Fting:calendar>就会报如下错误:
CS0117: “System.Web.UI.WebControls.Calendar”并不包含“calendarstyle”的定义
网上的资料太少了,不知道这个问题该怎么解决。