VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > 批处理教程 >
  • C# 教程之使用 DateTimePicker 控件

使用 DateTimePicker 控件

DateTimePicker 控件显示日期和/或时间信息,并且可以作为一个用户用以修改日期和时间信息的界面。控件的显示包含由控件格式字符串定义的字段。当下拉 DateTimePicker 控件时,将会显示一个 MonthView 日历。

该控件有两种不同的模式: 

下拉日历模式(缺省)——使用户能够显示下拉的日历,以便用于选择日期。

时间格式模式——使用户能够在日期显示中选择一个字段(即月、日、年等),并通过按下控件右部的上/下箭头来设置其值。 
可以使用控件将日期按照各种预先设置的格式显示,这些格式包括短日期(11/14/97)、长日期(Friday, November 14, 1997)和时间(7:00:00 PM)。也可以使用格式字符串来指定自定义格式,或使用回调字段创建自己的格式。

下拉日历模式的DateTimePicker 控件

时间格式模式的DateTimePicker 控件

可能的用途
在需要显示使用受限制的或特殊格式字段的日期信息时,例如在某些工资表和进度应用程序中。

使用户能够通过单击鼠标就可以选择日期而不用输入日期值。 
使用控件的两种模式
DateTimePicker 对输入日期和时间的值来说就象一个被屏蔽的编辑控件。日期或时间的各个部分在控件的编辑部分中是被作为独立的字段 对待的。当用户单击每个字段时,字段将被突出显示,并且可以通过上下箭头来增减相应字段的值。用户也可以在必要的地方直接在控件中输入值。

UpDown 属性决定了控件属于何种模式。当 UpDown 被设为 False时,控件就属于下拉日历模式(缺省值)。如果 UpDown 属性被设为 True,那么DateTimePicker 就属于时间格式模式。

在时间格式模式中,控件的右部将出现两个滚动箭头。用户可以通过用鼠标单击这些箭头来增减当前选中字段的值。在下拉日历模式中,该控件下拉出一个用户可以选择日期的日历。

下拉日历有 MonthView 控件的大多数特性。有关如何建立和格式化 DateTimePicker 控件的下拉日历部分的详细信息,请参阅“使用 MonthView 控件”。

设置和返回日期
在控件中当前选中的日期是由 Value 属性决定的。可以在显示控件前(例如,在设计时或在Form_Load事件中)设置控件的 Value 属性,以便决定在控件中一开始选中哪个日期:

DTPicker1.Value = "10/31/97"

缺省情况下,控件的 Value 被设置为当前日期。如果在代码中更改了 DateTimePicker 的 Value 属性,控件会自动更新并反映出新的设置。

Value 属性返回一个原始的日期值,或者空值。DateTimePicker 控件具有几个属性,可以返回有关显示日期的特定信息: 

Month 属性返回包含当前选定日期的月份整数值(1-12)。

Day 属性返回当前选定的日(1-31)。

DayOfWeek 属性返回一个值,指出所选日期是星期几。(值根据 vbDayOfWeek 常量定义的值决定)

Year 属性返回包含当前选定日期的年份整数值。

Week 属性返回包含当前选定日期的星期序号。 
使用 Change 事件来确定用户何时更改了控件中的日期值。

使用CheckBox来选择无日期
使用 CheckBox 属性能够指定控件是否返回日期。缺省情况下,CheckBox 的值为 False,并且控件总是返回一个日期。

要让用户能够指定无日期,可以将 CheckBox 属性设置为 True(例如,如果使用 DateTimePicker 控件输入工程的完成日期而该工程还没有完成)。

如果 CheckBox 属性设为True,那么在控件日期和时间左边的编辑部分中将出现一个小的复选框。如果这个复选框没有被选中,那么 Value 属性返回一个空值。如果选中了这个复选框,那么控件通过 Value 属性返回当前显示日期。

使用日期和时间的格式
DateTimePicker 提供了很强的灵活性,以便在控件中将日期和时间的显示格式化。可以使用所有标准的 Visual Basic 格式化字符串,也可以使用回调字段来创建自定义格式。
Format 属性决定了控件如何格式化原始日期值。可以从预定义的格式化选项中选择一个,或使用控件的自定义格式化功能。

CustomFormat 属性定义了用于显示控件内容的格式表达式。可以通过指定格式字符串来告诉控件如何将日期输出格式化。DateTimePicker 控件支持下面这些格式字符串:

字符串描述

d1或2位的日。

dd2位日,1位值前加0。

ddd3字符星期缩写。

dddd星期全名。

h12小时格式1或2位小时。

hh12小时格式2位小时,1位值前加0。

H24小时格式1或2位小时。

HH24小时格式2位小时,1位值前加0。

m1或2位分钟。

mm2位分钟,1位值前加0。

M1或2位月份。

MM2位月份,1位值前加0。

MMM3字符月份缩写。

MMMM月份全名。

s1或2位的秒。

ss2位的秒,1位值前加0。

t1字母 AM/PM 缩写(“AM”简写为“A”)。

tt2字母 AM/PM 缩写(“AM”简写为“AM”)。

X回调字段,使程序员可以控制显示字段(如下所示。)可以使

用一系列多个‘X’来表示唯一的回调字段。

y1位年份(即1996显示为“6”)。

yy年份的最后2位(即1996显示为“96”)。

yyy完整的年份(即1996显示为“1996”)。

可以在格式字符串中添加主体文本。例如,如果希望控件按照“Today is: 05:30:31 Friday Nov 14, 1997”格 式显示当前日期,那么格式字符串应为“'Today is: 'hh':'m':'s ddddMMMdd', 'yyy”。主体文本必须用单引号括起 来。

利用回调字段创建自定义格式
上面描述的自定义格式之一就是回调字段。回调字段允许用户对格式字符串某个部分的输出进行自定义。要声明回调字段,必须在格式字符串主体中包含一个或多个‘X’字符(ASCII 码为88)。回调字段按照从左到右的顺序显示。

当用包含一个或多个回调字段的格式显示新的日期时,对于每个回调字段都会引发 Format 和 FormatSize 事件。可以使 用 Format 事件来指定一个自定义响应字符串,同时可以通过 FormatSize 事件决定用于显示该字符串的空间。通过这种行为可以对回调字段 的显示实现完全的控制。

每个‘X’序列都具有不同的含义。例如,X 可能表示“st/nd/rd/th”(即“1st一”“2nd”“3rd”“4th”等),而“XX”则可能表示“第一”“第二”“第三”“第四”等。这些字段并不对用户的文本进行格式化,而是把日期转化为可显示的格式。

例如,如果想要用英语显示月份的同时用西班牙语显示,应使用类似于下面的格式:

July (Julio) 29

需要创建的格式字符串如下所示:

MMMM XXXX d

在处理Format 和 FormatSize 事件时,可以通过将输入格式字符串和“XXXX”进行比较来检查调用了哪个回调字段。如果字段字 符串匹配,那么将生成输出字符串“(Julio)”,同时可以得到输出字符串的长度。X的个数仅被应用程序用来确定为回调字段提供什么样的文字。在处理 FormatSize 事件时,文本的大小可以在程序中通过计算得到。

Format 事件在控件需要填充回调字段时被调用,例如,当用户从下拉日历中选择了不同的日期时。但是 FormatSize 事件仅在格式字 符串发生变化时被调用(例如,将格式从“XX”变为“XXXX”时。)这意味着在 FormatSize 事件中计算回调字段大小时,必须考 虑 Format 事件返回的任何可能的结果。

例如,可以应用下面的过程来实现上面提到的格式字符串中的回调字段。
在窗体的(General)(Declarations)部分,声明一个数组变量作为查找表来保存西班牙文的月份名称:
Private sSpMonth(12) As String

在窗体的 Load 事件中,充填查找表,并将 DTPicker 设置为使用自定义格式字符串:
sSpMonth(0) = "Enero"
sSpMonth(1) = "Febrero"
sSpMonth(2) = "Marzo"
sSpMonth(3) = "Abril"
sSpMonth(4) = "Mayo"
sSpMonth(5) = "Junio"
sSpMonth(6) = "Julio"
sSpMonth(7) = "Agusto"
sSpMonth(8) = "Septiembre"
sSpMonth(9) = "Octubre"
sSpMonth(10) = "Noviembre"
sSpMonth(11) = "Diciembre"

DTPicker1.Format = dtpCustom
DTPicker1.CustomFormat = "MMMM (XXX) dd, yy"

在 FormatSize 事件中,从可能的返回值列表中找到最长的值。将这个值的长度指定为格式字符串的长度。这样将会避免在更改控件值时剪 短西班牙文的月份名称。
Private Sub DTPicker1_FormatSize(ByVal CallbackField As String,
Size As Integer)
Dim iMaxMonthLen As Integer
Dim iC As Integer
Select Case CallbackField
Case "XXX"
iMaxMonthLen = 0
For iC = 0 To 11
If iMaxMonthLen < Len(sSpMonth(iC)) Then
iMaxMonthLen = Len(sSpMonth(iC))
End If
Next iC
End Select
Size = iMaxMonthLen
End Sub

在 Format 事件中,返回适当的值作为格式化字符串:
Private Sub DTPicker1_Format(ByVal CallbackField As String,
FormattedString As String)
Select Case CallbackField
Case "XXX"
FormattedString = sSpMonth(DTPicker1.Month - 1)
End Select
End Sub

可以通过重复“X”字符创建唯一的回调字段。这样,格式字符串“XX dddd MMM dd', 'yyy XXX”就包含了两个回调字段。可以使用 Select 或 If 语句在 Format 和 FormatSize 事件中处理多个回调字符串。

回调字段被视为有效的字段处理,因此应用程序必须准备好处理CallbackKeyDown 事件。可以使用该事件处理回调字段中的单个击键,同 时提供击键合法性检查或自动完成输入。例如,如果用户在输入月份时输入了字母“D”,可以使用 CallbackKeyDown 事件用“十二月”填充回 调字段。

格式化 Calendar 控件
有多种选择可以对控件的下拉日历部分进行格式化。所有以“日历”打头的DateTimePicker 的属性都能影响下拉日历的格式。这些属性分 别对应于 MonthView 控件中的属性。例如,DateTimePicker 的 CalendarTitleTextColor 属性 和 MonthView 的 TitleTextColor 属性对应。有关日历格式化问题的详细信息,请参阅“使用 MonthView 控件”主题。

键盘界面
可以通过键盘对Calendar 控件进行操作。下表描述了在运行时可以对控件进行的各种操作。

 

键 描述
左箭头键 选定左边的相邻字段。如果在最左字段被选定时按下此键,则换行选定最右字段。
右箭头键 选定右边的相邻字段。如果在最右字段被选定时按下此键,则换行选定最左字段
上箭头键 增加选定字段的值。
下箭头键 减少选定字段的值。
HOME键 将选定字段的值改为其上界。
END键 将选定字段的值改为其下界。
上箭头键 增加选定字段的值。
下箭头键 减少选定字段的值。
数字键盘上的(+) 增加选定字段的值。
数字键盘上的(-) 减少选定字段的值。


下表描述了显示下拉日历时可以进行的不同操作。

键描述

左箭头键选定下一天。

右箭头键选定前一天。

上箭头键选定上一周的同一天。

下箭头键选定下一周的同一天

PAGE UP键将显示滚动到过去的月。

PAGE DOWN键将显示滚动到将来的月。

CTRL+PAGE UP键将显示滚动到上一年。

CTRL+PAGE DOWN键将显示滚动到下一年。

发行注意 DateTimePicker 控件是 COMCT232.ocx 文件中的 ActiveX 控件组的一部分。如果要在应用程序中使 用 DateTimePicekr 控件,必须将 COMCT232.ocx 文件添加到工程中。在发行应用程序时,需要 将 COMCT232.ocx 文件安装到用户的 Microsoft Windows 的 System 或System32 目录中。

相关教程