asp.net2.0 - web自定义控件的智能标记问题
这两天写了个web自定义控件,控件由一个TextBox、一个Button、一个Calendar构成。但不知道怎么给加个智能标记,智能标记是用来选择Calendar样式的。希望得到指点,谢谢!
下面是控件代码:
[Designer(typeof(DateSelectDesignerActionList))]
[DefaultProperty("EnableMultiSelect")]
[ToolboxBitmap(typeof(DateTextBox), "ToolIcon.DateSelect.bmp")]
[ToolboxData("<{0}:DateSelect runat=server></{0}:DateSelect>")]
public class DateSelect : WebControl, INamingContainer, IComponent
{
private TextBox txtDateTime;
private Button btnSelect;
private Calendar calDateTime;
public DateSelect()
{
InitializeComponent();
}
public void InitializeComponent()
{
CreateComponent();
SetComponentProperty();
SetComponentEvent();
}
public void CreateComponent()
{
// Create Control
txtDateTime = new TextBox();
btnSelect = new Button();
calDateTime = new Calendar();
// Nest Control
Controls.Add(txtDateTime);
Controls.Add(btnSelect);
Controls.Add(calDateTime);
}
public void SetComponentProperty()
{
btnSelect.Text = "选择";
calDateTime.Visible = false;
calDateTime.Font.Name = "Verdana";
calDateTime.Font.Size = 8;
calDateTime.Style.Add("position", "absolute");
calDateTime.Style["top"] = txtDateTime.Style["top"];
calDateTime.Style["left"] = txtDateTime.Style["left"];
}
public void SetComponentEvent()
{
btnSelect.Click += new EventHandler(btnSelect_Click);
calDateTime.SelectionChanged += new EventHandler(calDateTime_SelectionChanged);
calDateTime.Load += new EventHandler(calDateTime_Load);
}
public void btnSelect_Click(object sender, EventArgs e)
{
if (EnableMultiSelect)
{
if (btnSelect.Text == "选择")
{
btnSelect.Text = "完成";
calDateTime.Visible = true;
}
else
{
btnSelect.Text = "选择";
calDateTime.Visible = false; ;
}
}
else
{
calDateTime.Visible = true; ;
}
}
public void calDateTime_SelectionChanged(object sender, EventArgs e)
{
string selectedDates = txtDateTime.Text;
if (EnableMultiSelect)
{
string s = string.Empty;
SelectedDatesCollection sdc = calDateTime.SelectedDates;
foreach (DateTime dt in sdc)
{
s = dt.ToString("yyyy-MM-dd");
if (selectedDates.IndexOf(s) == -1)
{
selectedDates += "," + s;
calDateTime.SelectedDates.Add(Convert.ToDateTime(s));
}
//else
//{
//int i = selectedDates.IndexOf(s);
//selectedDates = selectedDates.Remove(i, i + s.Length);
//calDateTime.SelectedDates.Remove(Convert.ToDateTime(s));
//}
}
selectedDates = selectedDates.Trim(',');
}
else
{
selectedDates = calDateTime.SelectedDate.ToString("yyyy-MM-dd");
calDateTime.Visible = false;
}
Text = selectedDates;
txtDateTime.Text = selectedDates;
}
public void calDateTime_Load(object sender, EventArgs e)
{
if (Text != string.Empty)
{
string[] selectedDates = Text.Split(',');
foreach (string s in selectedDates)
{
calDateTime.SelectedDates.Add(Convert.ToDateTime(s));
}
}
}
#region Single Or Multiple
[Bindable(true)]
[DefaultValue("False")]
[DescriptionAttribute("单个和多个日期选择。")]
[Category("日历-杂项")]
[Localizable(true)]
public bool EnableMultiSelect
{
get { return ((ViewState["EnableMultiSelect"] == null) ? false : (bool)ViewState["EnableMultiSelect"]); }
set { ViewState["EnableMultiSelect"] = value; }
}
#endregion
#region Visable For Select Button
[Bindable(true)]
[DefaultValue("Ture")]
[DescriptionAttribute("选择按钮是否可见并呈现出来。")]
[Category("日历-杂项")]
[Localizable(true)]
public bool VisableSelectButton
{
get { return ((ViewState["VisableSelectButton"] == null) ? false : (bool)ViewState["VisableSelectButton"]); }
set { ViewState["VisableSelectButton"] = value; }
}
#endregion
#region TextBox Text
[Bindable(true)]
[Category("Appearance")]
[DefaultValue("")]
[DescriptionAttribute("选择的日期。(多个以逗号隔开)")]
[Localizable(true)]
public string Text
{
get { return ((ViewState["Text"] == null) ? String.Empty : (String)ViewState["Text"]); }
set { ViewState["Text"] = value; }
}
#endregion
#region TextBox Width
[Bindable(true)]
[Category("Appearance")]
[DescriptionAttribute("控件的宽度。")]
[DefaultValue("")]
[Localizable(true)]
public override Unit Width
{
get { return txtDateTime.Width; }
set { txtDateTime.Width = value; }
}
#endregion
#region TextBox Height
[Bindable(true)]
[Category("Appearance")]
[DescriptionAttribute("控件的高度。")]
[DefaultValue("")]
[Localizable(true)]
public override Unit Height
{
get { return txtDateTime.Height; }
set { txtDateTime.Height = value; }
}
#endregion
#region TextBox BackColor
public override Color BackColor
{
get { return txtDateTime.BackColor; }
set { txtDateTime.BackColor = value; }
}
#endregion
。
。
。
protected override void RenderContents(HtmlTextWriter output)
{
txtDateTime.RenderControl(output);
btnSelect.RenderControl(output);
calDateTime.RenderControl(output);
}
}
智能标记代码,存在问题,有点迷糊了:
using System;
using System.ComponentModel.Design;
public class DateSelectDesignerActionList : DesignerActionList
{
public DateSelectDesignerActionList(DateSelect ds)
: base(ds)
{
AutoShow = true;
}
public override DesignerActionItemCollection GetSortedActionItems()
{
DesignerActionItemCollection actionItems = new DesignerActionItemCollection();
actionItems.Add(
new DesignerActionMethodItem(this, "自动套用格式", "Calendar 任务", true)
);
return actionItems;
}
}