溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#中如何使用Calendar控件

發布時間:2021-07-07 17:21:05 來源:億速云 閱讀:278 作者:Leah 欄目:編程語言

C#中如何使用Calendar控件,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

一、預備知識

在C#中可以開發兩種服務器控件,一個是用戶控件(User Control)和自定義控件(Custom Control)。用戶控件的本質與頁面文件(ASPx文件)差不多,是可被其它aspx頁面重復使用的HTML代碼段,當然它也包括后臺代碼(Code-behind),后綴名是ascx。所以在開發一些公用的靜態頁面時(例如頁頭,頁腳)經常用到,但它的缺點是不易繼承,不易分發,無法編譯成二進制代碼來進行部署。但是自定義控件的功能就強大許多,它可以被編譯成二進制代碼(DLL文件),可以被擴展、繼承、分發。就像Web Form Control一樣,其實它們每個控件就是一個DLL文件。

開發用戶控件比較簡單,就像編寫一個aspx頁面一樣,在這里就不介紹了。本文對象是自定義控件。服務器控件的基類是System.Web.UI.Control。如果要開發可視化的服務器控件,那我們需要從 System.Web.UI.WebControls來繼承,否則從System.Web.UI.Control繼承。

服務器控件在設計時以runat=”server”腳本代碼嵌入到aspx文件中來表示此控件是在服務器端運行的。在服務器控件所在頁面提交回傳(PostBack)過程中是依靠ViewState(視圖狀態)來維護控件狀態的。所以我們在設計服務器控件屬性時,其值應保存在ViewState 中。

二、代碼編寫

C#編寫Calendar控件,但是現在我需要一個可以下拉的日歷控件,并且初始時不顯示日歷,當我點擊下拉按鈕時才彈出,并且當選擇了日期,日歷會自動隱藏且選擇的日期值會顯示到相應的輸入框中。顯然Calendar控件不能滿足我的需要,但是稍后我會在我的自定義控件中用到它。

首先新建項目,在項目類型中選擇Visual C#項目,在模板列表中選擇Web控件庫,輸入項目名稱AquaCalendar,然后選擇項目所在目錄,點擊【確定】按鈕。C#將會生成基本的框架代碼。將項目中的類文件和類名改名為DatePicker(即日期控件的類名)。由于DatePicker是可視化控件,所以我們必須從System.Web.UI.WebControls繼承。并且它包括一個輸入框,一個按鈕和日歷控件,需要在DatePicker類中聲明它們。像這種以多個服務器控件組合的控件成為復合控件。代碼如下,比較重要的方法和代碼在注釋中會加以說明:

  1. using System;  

  2. using System.Web.UI;  

  3. using System.Web.UI.WebControls;  

  4. using System.ComponentModel;  

  5. using System.Drawing;  

  6.  

  7. namespace AquaCalendar  

  8. {  

  9. [DefaultProperty("Text"),  

  10.     //在屬性工具箱中顯示的默認屬性  

  11. ToolboxData("<{0}:DatePicker runat=server>")]  

  12. public class DatePicker :  

  13.       System.Web.UI.WebControls.WebControl ,  

  14.        IPostBackEventHandler  

  15. {  

  16. //選擇日期按鈕的默認樣式  

  17. private const string _BUTTONDEFAULTSTYLE = "BORDER-RIGHT: gray 1px solid; 

  18. BORDER-TOP: gray 1px solid; BORDER-LEFT: gray 1px solid; 

  19. CURSOR: hand; 

  20. BORDER-BOTTOM: gray 1px solid;";  

  21.  

  22. //按鈕默認文本  

  23.  

  24. private const string _BUTTONDEFAULTTEXT = "...";  

  25. private System.Web.UI.WebControls.Calendar _Calendar;  

  26.  

  27. public override ControlCollection Controls  

  28. {  

  29. get  

  30. {  

  31. EnsureChildControls(); //確認子控件集都已被創建  

  32. return base.Controls;  

  33. }  

  34. }  

  35.  

  36. //創建子控件(服務器日歷控件)  

  37.  

  38. protected override void CreateChildControls()  

  39. {  

  40. Controls.Clear();  

  41. _Calendar = new Calendar();  

  42. _Calendar.ID = MyCalendarID;  

  43. _Calendar.SelectedDate = DateTime.Parse(Text);  

  44. _Calendar.TitleFormat = TitleFormat.MonthYear;  

  45. _Calendar.NextPrevFormat = NextPrevFormat.ShortMonth;  

  46. _Calendar.CellSpacing = 0;  

  47. _Calendar.Font.Size = FontUnit.Parse("9pt");  

  48. _Calendar.Font.Name = "Verdana";  

  49. _Calendar.SelectedDayStyle.BackColor = ColorTranslator.FromHtml("#333399");  

  50. _Calendar.SelectedDayStyle.ForeColor = ColorTranslator.FromHtml("White");  

  51. _Calendar.DayStyle.BackColor = ColorTranslator.FromHtml("#CCCCCC");  

  52. _Calendar.TodayDayStyle.BackColor = ColorTranslator.FromHtml("#999999");  

  53. _Calendar.TodayDayStyle.ForeColor = ColorTranslator.FromHtml("Aqua");  

  54. _Calendar.DayHeaderStyle.Font.Size = FontUnit.Parse("8pt");  

  55. _Calendar.DayHeaderStyle.Font.Bold = true;  

  56. _Calendar.DayHeaderStyle.Height = Unit.Parse("8pt");  

  57. _Calendar.DayHeaderStyle.ForeColor = ColorTranslator.FromHtml("#333333");  

  58. _Calendar.NextPrevStyle.Font.Size = FontUnit.Parse("8pt");  

  59. _Calendar.NextPrevStyle.Font.Bold = true;  

  60. _Calendar.NextPrevStyle.ForeColor = ColorTranslator.FromHtml("White");  

  61. _Calendar.TitleStyle.Font.Size = FontUnit.Parse("12pt");  

  62. _Calendar.TitleStyle.Font.Bold = true;  

  63. _Calendar.TitleStyle.Height = Unit.Parse("12pt");  

  64. _Calendar.TitleStyle.ForeColor = ColorTranslator.FromHtml("White");  

  65. _Calendar.TitleStyle.BackColor = ColorTranslator.FromHtml("#333399");  

  66. _Calendar.OtherMonthDayStyle.ForeColor = ColorTranslator.FromHtml("#999999");  

  67. _Calendar.NextPrevFormat = NextPrevFormat.CustomText;  

  68. _Calendar.NextMonthText = "下月";  

  69. _Calendar.PrevMonthText = "上月";  

  70. _Calendar.Style.Add("display","none"); //默認不顯示下拉日歷控件  

  71. _Calendar.SelectionChanged += new EventHandler(_Calendar_SelectionChanged);  

  72. this.Controls.Add(_Calendar);  

  73. }  

  74. [  

  75. Category("Appearance"), //該屬性所屬類別,參見圖  

  76. DefaultValue(""), //屬性默認值  

  77. Description("設置該日期控件的值。") //屬性的描述  

  78. ]  

  79.  

  80. public string Text  

  81. {  

  82. get  

  83. {  

  84. EnsureChildControls();  

  85. return (ViewState["Text"] == null)?System.DateTime.Today.
    ToString("yyyy-MM-dd"):ViewState["Text"].ToString();  

  86. }  

  87. set  

  88. {  

  89. EnsureChildControls();  

  90. DateTime dt = System.DateTime.Today;  

  91. try  

  92. {  

  93. dt = DateTime.Parse(value);  

  94. }  

  95. catch  

  96. {  

  97. throw new ArgumentOutOfRangeException("請輸入日期型字符串(例如:1981-04-29)!");  

  98. }  

  99.  

  100. ViewState["Text"] = DateFormat == CalendarEnum.LongDateTime?dt.
    ToString("yyyy-MM-dd"):dt.ToString("yyyy-M-d");  

  101. }  

  102. }  

  103.  

  104. //重載服務器控件的Enabled屬性,將選擇日期按鈕變灰(禁用)  

  105.  

  106. public override bool Enabled  

  107. {  

  108. get  

  109. {  

  110. EnsureChildControls();  

  111. return ViewState["Enabled"] == null?true:(bool)ViewState["Enabled"];  

  112. }  

  113. set  

  114. {  

  115. EnsureChildControls();  

  116. ViewState["Enabled"] = value;  

  117. }  

  118. }  

  119.  

  120. public string ButtonStyle  

  121. {  

  122. get  

  123. {  

  124. EnsureChildControls();  

  125. object o = ViewState["ButtonSytle"];  

  126. return (o == null)?_BUTTONDEFAULTSTYLE:o.ToString();  

  127. }  

  128. set  

  129. {  

  130. EnsureChildControls();  

  131. ViewState["ButtonSytle"] = value;  

  132. }  

  133. }  

  134.  

  135. [  

  136. DefaultValue(CalendarEnum.LongDateTime),  

  137. ]  

  138.  

  139. public CalendarEnum DateFormat  

  140. {  

  141. get  

  142. {  

  143. EnsureChildControls();  

  144. object format = ViewState["DateFormat"];  

  145. return format == null?CalendarEnum.LongDateTime:(CalendarEnum)format;  

  146. }  

  147. set  

  148. {  

  149. EnsureChildControls();  

  150. ViewState["DateFormat"] = value;  

  151. DateTime dt = DateTime.Parse(Text);  

  152. Text=DateFormat == CalendarEnum.LongDateTime?dt.
    ToString("yyyy-MM-dd"):dt.ToString("yyyy-M-d");  

  153. }  

  154. }  

  155.  

  156. [  

  157. Browsable(false),  

  158. DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)  

  159. ]  

  160.  

  161. public string MyCalendarID //復合控件ID  

  162. {  

  163. get  

  164. {  

  165. EnsureChildControls();  

  166. return this.ClientID+"_MyCalendar";  

  167. }  

  168. }  

  169.  

  170. [  

  171. Browsable(false),  

  172. DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)  

  173. ]  

  174.  

  175. public string MyCalendarName //復合控件名稱  

  176. {  

  177. get  

  178. {  

  179. EnsureChildControls();  

  180. return this.UniqueID+":MyCalendar";  

  181. }  

  182. }  

  183.  

  184. [  

  185. Browsable(false),  

  186. DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)  

  187. ]  

  188.  

  189. public string DatePickerInputID //復合控件中輸入框的ID  

  190. {  

  191. get  

  192. {  

  193. EnsureChildControls();  

  194. return this.ClientID+"_DateInput";  

  195. }  

  196. }  

  197.  

  198. [  

  199. Browsable(false),  

  200. DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)  

  201. ]  

  202.  

  203. public string DatePickerInputName //復合控件中輸入框的名稱  

  204. {  

  205. get  

  206. {  

  207. EnsureChildControls();  

  208. return this.UniqueID+":DateInput";  

  209. }  

  210. }  

  211.  

  212. [  

  213. Browsable(false),  

  214. DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)  

  215. ]  

  216.  

  217. public string DatePickerButtonID //復合控件中按鈕的ID  

  218. {  

  219. get  

  220. {  

  221. EnsureChildControls();  

  222. return this.ClientID+"_DateButton";  

  223. }  

  224. }  

  225.  

  226. [  

  227. Browsable(false),  

  228. DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)  

  229. ]  

  230.  

  231. public string DatePickerButtonName //復合控件中按鈕的名稱  

  232. {  

  233. get  

  234. {  

  235. EnsureChildControls();  

  236. return this.UniqueID+":DateButton";  

  237. }  

  238. }  

  239.  

  240. public string ButtonText  

  241. {  

  242. get  

  243. {  

  244. EnsureChildControls();  

  245. return ViewState["ButtonText"] == null?_BUTTONDEFAULTTEXT:
    (string)ViewState["ButtonText"];  

  246. }  

  247. set  

  248. {  

  249. EnsureChildControls();  

  250. ViewState["ButtonText"] = value;  

  251. }  

  252. }  

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女