C#中如何使用Calendar控件,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。
創(chuàng)新互聯(lián)建站是一家專注于成都做網(wǎng)站、網(wǎng)站設(shè)計(jì)與策劃設(shè)計(jì),通榆網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)建站做網(wǎng)站,專注于網(wǎng)站建設(shè)10多年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:通榆等地區(qū)。通榆做網(wǎng)站價(jià)格咨詢:18982081108
一、預(yù)備知識(shí)
在C#中可以開(kāi)發(fā)兩種服務(wù)器控件,一個(gè)是用戶控件(User Control)和自定義控件(Custom Control)。用戶控件的本質(zhì)與頁(yè)面文件(ASPx文件)差不多,是可被其它aspx頁(yè)面重復(fù)使用的HTML代碼段,當(dāng)然它也包括后臺(tái)代碼(Code-behind),后綴名是ascx。所以在開(kāi)發(fā)一些公用的靜態(tài)頁(yè)面時(shí)(例如頁(yè)頭,頁(yè)腳)經(jīng)常用到,但它的缺點(diǎn)是不易繼承,不易分發(fā),無(wú)法編譯成二進(jìn)制代碼來(lái)進(jìn)行部署。但是自定義控件的功能就強(qiáng)大許多,它可以被編譯成二進(jìn)制代碼(DLL文件),可以被擴(kuò)展、繼承、分發(fā)。就像Web Form Control一樣,其實(shí)它們每個(gè)控件就是一個(gè)DLL文件。
開(kāi)發(fā)用戶控件比較簡(jiǎn)單,就像編寫一個(gè)aspx頁(yè)面一樣,在這里就不介紹了。本文對(duì)象是自定義控件。服務(wù)器控件的基類是System.Web.UI.Control。如果要開(kāi)發(fā)可視化的服務(wù)器控件,那我們需要從 System.Web.UI.WebControls來(lái)繼承,否則從System.Web.UI.Control繼承。
服務(wù)器控件在設(shè)計(jì)時(shí)以runat=”server”腳本代碼嵌入到aspx文件中來(lái)表示此控件是在服務(wù)器端運(yùn)行的。在服務(wù)器控件所在頁(yè)面提交回傳(PostBack)過(guò)程中是依靠ViewState(視圖狀態(tài))來(lái)維護(hù)控件狀態(tài)的。所以我們?cè)谠O(shè)計(jì)服務(wù)器控件屬性時(shí),其值應(yīng)保存在ViewState 中。
二、代碼編寫
C#編寫Calendar控件,但是現(xiàn)在我需要一個(gè)可以下拉的日歷控件,并且初始時(shí)不顯示日歷,當(dāng)我點(diǎn)擊下拉按鈕時(shí)才彈出,并且當(dāng)選擇了日期,日歷會(huì)自動(dòng)隱藏且選擇的日期值會(huì)顯示到相應(yīng)的輸入框中。顯然Calendar控件不能滿足我的需要,但是稍后我會(huì)在我的自定義控件中用到它。
首先新建項(xiàng)目,在項(xiàng)目類型中選擇Visual C#項(xiàng)目,在模板列表中選擇Web控件庫(kù),輸入項(xiàng)目名稱AquaCalendar,然后選擇項(xiàng)目所在目錄,點(diǎn)擊【確定】按鈕。C#將會(huì)生成基本的框架代碼。將項(xiàng)目中的類文件和類名改名為DatePicker(即日期控件的類名)。由于DatePicker是可視化控件,所以我們必須從System.Web.UI.WebControls繼承。并且它包括一個(gè)輸入框,一個(gè)按鈕和日歷控件,需要在DatePicker類中聲明它們。像這種以多個(gè)服務(wù)器控件組合的控件成為復(fù)合控件。代碼如下,比較重要的方法和代碼在注釋中會(huì)加以說(shuō)明:
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
using System.Drawing;
namespace AquaCalendar
{
[DefaultProperty("Text"),
//在屬性工具箱中顯示的默認(rèn)屬性
ToolboxData("<{0}:DatePicker runat=server>")]
public class DatePicker :
System.Web.UI.WebControls.WebControl ,
IPostBackEventHandler
{
//選擇日期按鈕的默認(rèn)樣式
private const string _BUTTONDEFAULTSTYLE = "BORDER-RIGHT: gray 1px solid;
BORDER-TOP: gray 1px solid; BORDER-LEFT: gray 1px solid;
CURSOR: hand;
BORDER-BOTTOM: gray 1px solid;";
//按鈕默認(rèn)文本
private const string _BUTTONDEFAULTTEXT = "...";
private System.Web.UI.WebControls.Calendar _Calendar;
public override ControlCollection Controls
{
get
{
EnsureChildControls(); //確認(rèn)子控件集都已被創(chuàng)建
return base.Controls;
}
}
//創(chuàng)建子控件(服務(wù)器日歷控件)
protected override void CreateChildControls()
{
Controls.Clear();
_Calendar = new Calendar();
_Calendar.ID = MyCalendarID;
_Calendar.SelectedDate = DateTime.Parse(Text);
_Calendar.TitleFormat = TitleFormat.MonthYear;
_Calendar.NextPrevFormat = NextPrevFormat.ShortMonth;
_Calendar.CellSpacing = 0;
_Calendar.Font.Size = FontUnit.Parse("9pt");
_Calendar.Font.Name = "Verdana";
_Calendar.SelectedDayStyle.BackColor = ColorTranslator.FromHtml("#333399");
_Calendar.SelectedDayStyle.ForeColor = ColorTranslator.FromHtml("White");
_Calendar.DayStyle.BackColor = ColorTranslator.FromHtml("#CCCCCC");
_Calendar.TodayDayStyle.BackColor = ColorTranslator.FromHtml("#999999");
_Calendar.TodayDayStyle.ForeColor = ColorTranslator.FromHtml("Aqua");
_Calendar.DayHeaderStyle.Font.Size = FontUnit.Parse("8pt");
_Calendar.DayHeaderStyle.Font.Bold = true;
_Calendar.DayHeaderStyle.Height = Unit.Parse("8pt");
_Calendar.DayHeaderStyle.ForeColor = ColorTranslator.FromHtml("#333333");
_Calendar.NextPrevStyle.Font.Size = FontUnit.Parse("8pt");
_Calendar.NextPrevStyle.Font.Bold = true;
_Calendar.NextPrevStyle.ForeColor = ColorTranslator.FromHtml("White");
_Calendar.TitleStyle.Font.Size = FontUnit.Parse("12pt");
_Calendar.TitleStyle.Font.Bold = true;
_Calendar.TitleStyle.Height = Unit.Parse("12pt");
_Calendar.TitleStyle.ForeColor = ColorTranslator.FromHtml("White");
_Calendar.TitleStyle.BackColor = ColorTranslator.FromHtml("#333399");
_Calendar.OtherMonthDayStyle.ForeColor = ColorTranslator.FromHtml("#999999");
_Calendar.NextPrevFormat = NextPrevFormat.CustomText;
_Calendar.NextMonthText = "下月";
_Calendar.PrevMonthText = "上月";
_Calendar.Style.Add("display","none"); //默認(rèn)不顯示下拉日歷控件
_Calendar.SelectionChanged += new EventHandler(_Calendar_SelectionChanged);
this.Controls.Add(_Calendar);
}
[
Category("Appearance"), //該屬性所屬類別,參見(jiàn)圖
DefaultValue(""), //屬性默認(rèn)值
Description("設(shè)置該日期控件的值。") //屬性的描述
]
public string Text
{
get
{
EnsureChildControls();
return (ViewState["Text"] == null)?System.DateTime.Today.
ToString("yyyy-MM-dd"):ViewState["Text"].ToString();}
set
{
EnsureChildControls();
DateTime dt = System.DateTime.Today;
try
{
dt = DateTime.Parse(value);
}
catch
{
throw new ArgumentOutOfRangeException("請(qǐng)輸入日期型字符串(例如:1981-04-29)!");
}
ViewState["Text"] = DateFormat == CalendarEnum.LongDateTime?dt.
ToString("yyyy-MM-dd"):dt.ToString("yyyy-M-d");}
}
//重載服務(wù)器控件的Enabled屬性,將選擇日期按鈕變灰(禁用)
public override bool Enabled
{
get
{
EnsureChildControls();
return ViewState["Enabled"] == null?true:(bool)ViewState["Enabled"];
}
set
{
EnsureChildControls();
ViewState["Enabled"] = value;
}
}
public string ButtonStyle
{
get
{
EnsureChildControls();
object o = ViewState["ButtonSytle"];
return (o == null)?_BUTTONDEFAULTSTYLE:o.ToString();
}
set
{
EnsureChildControls();
ViewState["ButtonSytle"] = value;
}
}
[
DefaultValue(CalendarEnum.LongDateTime),
]
public CalendarEnum DateFormat
{
get
{
EnsureChildControls();
object format = ViewState["DateFormat"];
return format == null?CalendarEnum.LongDateTime:(CalendarEnum)format;
}
set
{
EnsureChildControls();
ViewState["DateFormat"] = value;
DateTime dt = DateTime.Parse(Text);
Text=DateFormat == CalendarEnum.LongDateTime?dt.
ToString("yyyy-MM-dd"):dt.ToString("yyyy-M-d");}
}
[
Browsable(false),
DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)
]
public string MyCalendarID //復(fù)合控件ID
{
get
{
EnsureChildControls();
return this.ClientID+"_MyCalendar";
}
}
[
Browsable(false),
DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)
]
public string MyCalendarName //復(fù)合控件名稱
{
get
{
EnsureChildControls();
return this.UniqueID+":MyCalendar";
}
}
[
Browsable(false),
DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)
]
public string DatePickerInputID //復(fù)合控件中輸入框的ID
{
get
{
EnsureChildControls();
return this.ClientID+"_DateInput";
}
}
[
Browsable(false),
DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)
]
public string DatePickerInputName //復(fù)合控件中輸入框的名稱
{
get
{
EnsureChildControls();
return this.UniqueID+":DateInput";
}
}
[
Browsable(false),
DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)
]
public string DatePickerButtonID //復(fù)合控件中按鈕的ID
{
get
{
EnsureChildControls();
return this.ClientID+"_DateButton";
}
}
[
Browsable(false),
DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)
]
public string DatePickerButtonName //復(fù)合控件中按鈕的名稱
{
get
{
EnsureChildControls();
return this.UniqueID+":DateButton";
}
}
public string ButtonText
{
get
{
EnsureChildControls();
return ViewState["ButtonText"] == null?_BUTTONDEFAULTTEXT:
(string)ViewState["ButtonText"];}
set
{
EnsureChildControls();
ViewState["ButtonText"] = value;
}
}
看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。
網(wǎng)頁(yè)標(biāo)題:C#中如何使用Calendar控件
瀏覽路徑:http://muchs.cn/article34/johdse.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、搜索引擎優(yōu)化、微信公眾號(hào)、關(guān)鍵詞優(yōu)化、網(wǎng)站營(yíng)銷、網(wǎng)站排名
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)