C#中如何使用Calendar控件

发布时间:2021-07-07 17:21:05 作者:Leah
阅读:217
开发者专用服务器限时活动,0元免费领! 查看>>

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. namespace AquaCalendar  

  7. {  

  8. [DefaultProperty("Text"),  

  9.     //在属性工具箱中显示的默认属性  

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

  11. public class DatePicker :  

  12.       System.Web.UI.WebControls.WebControl ,  

  13.        IPostBackEventHandler  

  14. {  

  15. //选择日期按钮的默认样式  

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

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

  18. CURSOR: hand; 

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

  20. //按钮默认文本  

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

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

  23. public override ControlCollection Controls  

  24. {  

  25. get  

  26. {  

  27. EnsureChildControls(); //确认子控件集都已被创建  

  28. return base.Controls;  

  29. }  

  30. }  

  31. //创建子控件(服务器日历控件)  

  32. protected override void CreateChildControls()  

  33. {  

  34. Controls.Clear();  

  35. _Calendar = new Calendar();  

  36. _Calendar.ID = MyCalendarID;  

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

  38. _Calendar.TitleFormat = TitleFormat.MonthYear;  

  39. _Calendar.NextPrevFormat = NextPrevFormat.ShortMonth;  

  40. _Calendar.CellSpacing = 0;  

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  61. _Calendar.NextPrevFormat = NextPrevFormat.CustomText;  

  62. _Calendar.NextMonthText = "下月";  

  63. _Calendar.PrevMonthText = "上月";  

  64. _Calendar.Style.Add("display","none"); //默认不显示下拉日历控件  

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

  66. this.Controls.Add(_Calendar);  

  67. }  

  68. [  

  69. Category("Appearance"), //该属性所属类别,参见图  

  70. DefaultValue(""), //属性默认值  

  71. Description("设置该日期控件的值。") //属性的描述  

  72. ]  

  73. public string Text  

  74. {  

  75. get  

  76. {  

  77. EnsureChildControls();  

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

  79. }  

  80. set  

  81. {  

  82. EnsureChildControls();  

  83. DateTime dt = System.DateTime.Today;  

  84. try  

  85. {  

  86. dt = DateTime.Parse(value);  

  87. }  

  88. catch  

  89. {  

  90. throw new ArgumentOutOfRangeException("请输入日期型字符串(例如:1981-04-29)!");  

  91. }  

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

  93. }  

  94. }  

  95. //重载服务器控件的Enabled属性,将选择日期按钮变灰(禁用)  

  96. public override bool Enabled  

  97. {  

  98. get  

  99. {  

  100. EnsureChildControls();  

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

  102. }  

  103. set  

  104. {  

  105. EnsureChildControls();  

  106. ViewState["Enabled"] = value;  

  107. }  

  108. }  

  109. public string ButtonStyle  

  110. {  

  111. get  

  112. {  

  113. EnsureChildControls();  

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

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

  116. }  

  117. set  

  118. {  

  119. EnsureChildControls();  

  120. ViewState["ButtonSytle"] = value;  

  121. }  

  122. }  

  123. [  

  124. DefaultValue(CalendarEnum.LongDateTime),  

  125. ]  

  126. public CalendarEnum DateFormat  

  127. {  

  128. get  

  129. {  

  130. EnsureChildControls();  

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

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

  133. }  

  134. set  

  135. {  

  136. EnsureChildControls();  

  137. ViewState["DateFormat"] = value;  

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

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

  140. }  

  141. }  

  142. [  

  143. Browsable(false),  

  144. DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)  

  145. ]  

  146. public string MyCalendarID //复合控件ID  

  147. {  

  148. get  

  149. {  

  150. EnsureChildControls();  

  151. return this.ClientID+"_MyCalendar";  

  152. }  

  153. }  

  154. [  

  155. Browsable(false),  

  156. DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)  

  157. ]  

  158. public string MyCalendarName //复合控件名称  

  159. {  

  160. get  

  161. {  

  162. EnsureChildControls();  

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

  164. }  

  165. }  

  166. [  

  167. Browsable(false),  

  168. DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)  

  169. ]  

  170. public string DatePickerInputID //复合控件中输入框的ID  

  171. {  

  172. get  

  173. {  

  174. EnsureChildControls();  

  175. return this.ClientID+"_DateInput";  

  176. }  

  177. }  

  178. [  

  179. Browsable(false),  

  180. DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)  

  181. ]  

  182. public string DatePickerInputName //复合控件中输入框的名称  

  183. {  

  184. get  

  185. {  

  186. EnsureChildControls();  

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

  188. }  

  189. }  

  190. [  

  191. Browsable(false),  

  192. DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)  

  193. ]  

  194. public string DatePickerButtonID //复合控件中按钮的ID  

  195. {  

  196. get  

  197. {  

  198. EnsureChildControls();  

  199. return this.ClientID+"_DateButton";  

  200. }  

  201. }  

  202. [  

  203. Browsable(false),  

  204. DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)  

  205. ]  

  206. public string DatePickerButtonName //复合控件中按钮的名称  

  207. {  

  208. get  

  209. {  

  210. EnsureChildControls();  

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

  212. }  

  213. }  

  214. public string ButtonText  

  215. {  

  216. get  

  217. {  

  218. EnsureChildControls();  

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

  220. }  

  221. set  

  222. {  

  223. EnsureChildControls();  

  224. ViewState["ButtonText"] = value;  

  225. }  

  226. }  

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

推荐阅读:
  1. C# 中datagridview控件的使用
  2. ASP.NET中如何使用 Calendar日历控件

开发者交流群:

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

calendar

上一篇:怎么利用JavaScript获取字符串中重复次数最多的字符

下一篇:项目中如何使用axios过滤多次重复请求

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》
开发者交流群×