Visual Studio2008发布后,迅速吸引了大量的VB.NET爱好者。Visual Studio2008以优化性和强大的功能而著称,所以一时间同样也吸引了大量的专业编程人员。经过人们几个月的试用后,可以发现使用者普遍对这个新版本的Visual Studio感到满意。当然Visual Studio2008最为突出的特点是快捷而更具有人性化了。如今的Visual Studio2008的控件应用仍然相当重要而且很实用。今天我将要介绍几个比较常用的控件和它们的相关属性,通过一个实例让大家详细的了解程序的基本开发过程与控件使用技巧。本文适合VB.net初学者和具备一定基础的VB.net使用者,读者将在本文学习到GroupBox、 DateTimePicker、ComboBox、Textbox、Label、MonthCalendar、CheckBox等控件的使用,以及对于 Windows窗体设计器的操作和方法的简单介绍。
打开 Visual Studio 2008。在文件 (File) 菜单上,单击新建项目 (New Project)。 在新建项目 (New Project) 对话框的模板 (Templates) 窗格中,单击 Windows 应用程序(Windows Application)。单击确定 (OK)。
在Form1窗体靠右侧中添加GroupBox1,GroupBox2控件(注意:GroupBox2创建在GroupBox1上)。其中GroupBox1的Text为: 时间日期,GroupBox2的Text为:选项。如图1所示
完成后,我们需要在GroupBox1中添加DateTimePicker1控件。
DateTimePicker控件详细属性解释:
DateTimePicker控件属性:
CalendarFont 获取或设置应用于日历的字体样式。
CalendarForeColor 获取或设置日历的前景色。
CalendarmonthBackground 获取或设置历月的背景色。
CalendarTitleBackColor 获取或设置日历标题的背景色。
CalendarTitleForeColor 获取或设置日历标题的前景色。
CalendarTrailingForeColor 获取或设置日历结尾日期的前景色。
CanFocus 获取一个值,该值指示控件是否可以接收焦点。 (从 Control 继承。) CanSelect 获取一个值,该值指示是否可以选中控件。 (从 Control 继承。)
Capture 获取或设置一个值,该值指示控件是否已捕获鼠标。 (从 Control 继承。) CausesValidation 获取或设置一个值,该值指示控件是否会引起在任何需要在接收焦点时执行验证的控件上执行验证。 (从 Control 继承。)
Checked 获取或设置一个值,该值指示是否已用有效日期/时间值设置了 Value 属性且显示的值可以更新。
CheckForIllegalCrossThreadCalls 获取或设置一个值,该值指示是否捕获对错误线程的调用,这些调用访问控件的 Handle 属性。 (从 Control 继承。)
ClientRectangle 获取表示控件的工作区的矩形。 (从 Control 继承。)
ClientSize 获取或设置控件的工作区的高度和宽度。 (从 Control 继承。)
CompanyName 获取包含控件的应用程序的公司名称或创建者。 (从 Control 继承。) Container 获取 IContainer,它包含 Component。 (从 Component 继承。)
ContainsFocus 获取一个值,该值指示控件或它的一个子控件当前是否有输入焦点。(从 Control 继承。)
ContextMenu 获取或设置与控件关联的快捷菜单。 (从 Control 继承。)
ContextMenuStrip 获取或设置与此控件关联的 ContextMenuStrip。 (从 Control 继承。)
Controls 获取包含在控件内的控件的集合。 (从 Control 继承。)
Created 获取一个值,该值指示控件是否已经创建。 (从 Control 继承。)
Cursor 获取或设置当鼠标指针位于控件上时显示的光标。 (从 Control 继承。)
CustomFormat 获取或设置自定义日期/时间格式字符串。
DataBindings 为该控件获取数据绑定。 (从 Control 继承。)
DefaultBackColor 获取控件的默认背景色。 (从 Control 继承。)
DefaultFont 获取控件的默认字体。 (从 Control 继承。)
DefaultForeColor 获取控件的默认前景色。 (从 Control 继承。)
在GroupBox2中添加3个Label控件. 属性Text分别设置如下:
Label1 Text:Time
Label2 Text:日期风格
Label3 Text:日期格式
设置完成后,效果如图2
设置后,我们还需要在GroupBox2中添加2个ComboBox1与ComboBox2控件,
以及一Textbox1控件。如图3
Form1窗体中右侧界面工作完成了。接着我们需要完成Form1左侧界面了(也是我们最重要的显示日期日历的界面)
在Form1窗体左侧添加MonthCalendar1控件,效果如图4
MonthCalendar1的控件的详细属性:
MonthCalendar1属性:
Margin 获取或设置控件之间的空间。 (从 Control 继承。)
MaxDate 获取或设置允许的最大日期。
MaximumSize 获取或设置大小,该大小是 GetPreferredSize 可以指定的上限。 (从Control 继承。)
MaxSelectionCount 获取或设置月历控件中可选择的最大天数。
MinDate 获取或设置允许的最小日期。
MinimumSize 获取或设置大小,该大小是 GetPreferredSize 可以指定的下限。 (从Control 继承。)
ModifierKeys 获取一个值,该值指示哪一个修改键(Shift、Ctrl 和 Alt)处于按下的状态。 (从 Control 继承。)
MonthlyBoldedDates 获取或设置 DateTime 对象的数组,确定每月要用粗体显示的日期。
MouseButtons 获取一个值,该值指示哪一个鼠标按钮处于按下的状态。 (从Control 继承。)
MousePosition 获取鼠标光标的位置(以屏幕坐标表示)。 (从 Control 继承。) Name 获取或设置控件的名称。 (从 Control 继承。)
Padding 获取或设置 MonthCalendar 控件的边缘与该控件的内容之间的空间。
Parent 获取或设置控件的父容器。 (从 Control 继承。)
PreferredSize 获取可以容纳控件的矩形区域的大小。
(从 Control 继承。)
ProductName 获取包含控件的程序集的产品名称。 (从 Control 继承。)
ProductVersion 获取包含控件的程序集的版本。 (从 Control 继承。)
RecreatingHandle 获取一个值,该值指示控件当前是否在重新创建其句柄。 (从Control 继承。)
Region 获取或设置与控件关联的窗口区域。 (从 Control 继承。)
Right 获取控件右边缘与其容器的工作区左边缘之间的距离(以像素为单位)。 (从Control 继承。)
RightToLeft 获取或设置一个值,该值指示是否将控件的元素对齐以支持使用从右向左的字体的区域设置。 (从 Control 继承。)
RightToLeftLayout 获取或设置一个值,该值指示控件是否从右到左布局。
ScrollChange 获取或设置月历控件的滚动率。
SelectionEnd 获取或设置选定日期范围的结束日期。
SelectionRange 为月历控件获取或设置选定的日期范围。
SelectionStart 获取或设置所选日期范围的开始日期。
ShowToday 获取或设置一个值,该值指示控件底端是否显示 TodayDate 属性表示的日期。
ShowTodayCircle 获取或设置一个值,它指示是否用圆形或用正方形标识当天日期。 ShowWeekNumbers 获取或设置一个值,该值指示月历控件是否在每行日期的左侧显示周数 (1-52)。
SingleMonthSize 获取显示一个日历月所需的最小大小。
Site 获取或设置控件的站点。 (从 Control 继承。)
Size 获取或设置 MonthCalendar 控件的大小。
TabIndex 获取或设置在控件的容器的控件的 Tab 键顺序。 (从 Control 继承。) TabStop 获取或设置一个值,该值指示用户能否使用 Tab 键将焦点放到该控件上。(从 Control 继承。)
Tag 获取或设置包含有关控件的数据的对象。 (从 Control 继承。)
Text 已重写。 获取或设置要在 MonthCalendar 上显示的文本。
TitleBackColor 获取或设置指示日历标题区的背景色的值。
TitleForeColor 获取或设置指示日历标题区的前景色的值。
TodayDate 获取或设置由 MonthCalendar 用作今天的日期的值。
TodayDateSet 获取指示是否已显式设置 TodayDate 属性的值。
Top 获取或设置控件上边缘与其容器的工作区上边缘之间的距离(以像素为单位)。(从 Control 继承。)
TopLevelControl 获取没有另一个 Windows 窗体控件作为其父级的父控件。通常,这是控件所在的最外面的 Form。 (从 Control 继承。)
TrailingForeColor 获取或设置一个值,该值指示控件中没有完全显示的月中日期的颜色。
UseWaitCursor 获取或设置一个值,该值指示是否将等待光标用于当前控件以及所有子控件。
在Form1中左侧添加一个CheckBox1控件Text属性设置为:展示今天的日期。再在CheckBox1控件下部添加一个Button控件Text属性设置为:Exit
最终效果如图5
基本上我们的界面工作完成了。接下来我们该输入代码了,详细过程如下:
双击Form1窗体进入Form1_Load事件中
代码如下:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.ComboBox1.Items.Add("long")
Me.ComboBox1.Items.Add("short")
Me.ComboBox1.Items.Add("timedate")
Me.ComboBox1.Items.Add("custom1")
Me.ComboBox1.Items.Add("custom2")
Me.ComboBox1.Items.Add("custom3")
Me.ComboBox1.Items.Add("custom4")
'添加日期显示格式
Me.ComboBox2.Items.Add("下拉菜单式")
Me.ComboBox2.Items.Add("点击/选择式")
'添加起始星期
Me.ComboBox1.SelectedIndex = 0
Me.ComboBox2.SelectedIndex = 0
Me.TextBox1.Text = TimeOfDay
End Sub
进入ComboBox1_SelectedIndexChanged事件中
代码如下:
Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
Select Case Me.ComboBox1.SelectedIndex
Case 0
Me.DateTimePicker1.Format = DateTimePickerFormat.Long
Case 1
Me.DateTimePicker1.Format = DateTimePickerFormat.Short
Case 2
Me.DateTimePicker1.Format = DateTimePickerFormat.Time
Case 3
Me.DateTimePicker1.Format = DateTimePickerFormat.Custom 'd表示一位
或两位的天数
Me.DateTimePicker1.CustomFormat = "MMM dd,yyy - ddd" 'dd表示两位数的天数,
Case 4
Me.DateTimePicker1.Format = DateTimePickerFormat.Custom
Me.DateTimePicker1.CustomFormat = "ddd,hh:mm:ss,tt" '星期几名称
Case 5
Me.DateTimePicker1.Format = DateTimePickerFormat.Custom Me.DateTimePicker1.CustomFormat = "dddd,HH:mm:ss,tt"
Case 6
Me.DateTimePicker1.Format = DateTimePickerFormat.Custom Me.DateTimePicker1.CustomFormat = "dddd,HH:m:ss,t"
End Select
Me.TextBox1.Text = TimeOfDay
End Sub
进入ComboBox2_SelectedIndexChanged事件中
代码如下:
Private Sub ComboBox2_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox2.SelectedIndexChanged
Select Case Me.ComboBox2.SelectedIndex
Case 0
Me.DateTimePicker1.ShowUpDown = False
Case 1
Me.DateTimePicker1.ShowUpDown = True
End Select
Me.TextBox1.Text = TimeOfDay
End Sub
进入CheckBox1_CheckStateChanged事件中
代码如下:
Private Sub CheckBox1_CheckStateChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckStateChanged
If Me.CheckBox1.Checked Then
Me.MonthCalendar1.ShowToday = True
'显示今天日期
Else
Me.MonthCalendar1.ShowToday = False
End If
End Sub
进入Button1_Click事件中
代码如下:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
End
End Sub
好了代码输入完毕。在这里补充说明:如果我们平时编写程序时输入完代码以后,
在代码视图中出现了Windows窗体设计器,有很多初学者不知道是什么。实际上Windows窗体设计器里面是系统自动生成代码,这里面的代码更加详细。有兴趣的朋友可看一看。具体打开Windows窗体设计器步骤如下,因为在平时Windows窗体设计器是隐藏的。
详细的操作过程如下:
1. 先选择<解决方案资源管理器>在上面有我们可以看到一些小图标,选中第2个图标(显示所有文件)如图6
这个时候我们可以看到之前所没有显示的文件了,单击Form1.vb的节点,
看到了吗?就是这个文件Form1.Designer.vb
双击打开它可以看到如图8所示的代码视图,这就是Windows窗体设计器了
好了,我们的所有要做的工作已经完成了,最后我们来测试一下程序吧,最终程序界面如下
在这个程序中,我们可以任意的选择多个复选框来选择一些样式。当然我们还可以增加更多的功能打造一个个性化的电子日历程序。
刚刚学习VB.NET不久,在做几个小例子的时候发现经常要对日期时间和字符串之间进行转换,现整理如下,如有不正确的地方请大家指出。
日期型转换为字符型是最简单的,可以直接转换。
用dt.ToString("yyyy/MM/dd hh:mm:ss:fff")是最方便的,可以转换为任意一种想要的字符串。
其中的毫秒部分最大有7位,【fff】表示只取前三位,【fffffff】表示取全部7位。
上面的例子执行结果发现了一个奇怪的问题,执行结果中【dt.ToString = 2007/04/16 15:10:21】,
而【dt.ToString(yyyy/MM/dd hh:mm:ss:fff) = 2007/04/16 03:10:21:714】,两者的小时部分相差了12,
网上好多帖子都说是因为计时开始时间的问题,我觉得肯定是转换时候的问题,不然为什么【ToString()】是正确的,
估计应该是时间表示的问题,试着把【ToString("yyyy/MM/dd HH:mm:ss:fff"))】中的【hh】改成大写的【HH】,执行OK。
特别值得注意的是月【MM】和分【mm】,如果两者写错了很难发现。 大小写需要注意的地方:
也可以用Format(Date,Format)进行转换
其他的日期型转换为字符型都可以先转换为Date型或者DateTime型,然后再通过ToString转换为字符型。
字符型转换为日期型最直接的方法就是解析日期字符串,取得年,月,日,时,分,秒,组织成日期形式【yyyy/MM/dd】或者【yyyy/MM/dd hh:mm:ss】,然后用CDate转换为日期型
或者是用DateTime的构造函数,DateTime的构造函数有好多个
还有就是直接定义一个日期型的变量,不过要注意必须是一下格式【MM/dd/yyyy HH:mm:ss.fffffff】,其中【MM/dd/yyyy】是必须项目
在一些数据库中保存日期的时候不是用日期型而是把日期转换成double型之后放入数据库,这样的情况下
就需要将Double转化为日期型。
例如:39188.7805780093 = 2007/04/16 18:44:01:940
39188表示天数,0.7805780093 表示 time.Second/(24*3600)的值。
在DateTime的构造函数里有一个单一参数的构造函数【DateTime (Int64)】将 DateTime 结构的新实例初始化为指定的刻度数(Ticks)。
日期零点值为1899年12月30日0点0分0秒0毫秒以来已经过的时间的以 100 毫微秒为间隔的间隔数。1秒钟是10,000,000 Ticks。
从而可以将Double型先转化为Long型的Ticks,计算方法如下
39188.7805780093 (天)*24(小时)*3600(秒)*10000000(100 毫微秒) = 33859106419400000
执行结果年日不正确,大概少了1900年,可能是因为从1899年12月30日开始计算的,要把计时开始的时间加上
1899年 12 月 30 日午夜 12:00:00开始的毫微秒数 = 599264352000000000
将上面的例子改写为下面的样子,结果就正确了
这样的方法用起来肯定很麻烦,DateTime还有另外一个从Double转换为Date型的方法,FromOADate(double),这样子就方便多了。当然,从日期型转换为Double型的话也很方便了,用Date.ToOaDate()就可以了.
Long型一般是表示为 Windows 文件时间的当前 DateTime 对象的值,它表示自协调通用时间 (UTC) 公元 (C.E.) 1601 年 1 月 1 日午夜 12:00 以来已经过的时间的以 100 毫微秒为间隔的间隔数。Windows 使用文件时间记录应用程序创建、访问或写入文件的时间。用Date.FromFileTime(long)方法。还有一个FromFileTimeUtc(long)方法,是将当前文件时间转换为同时的UTC(协调通用时间)
同样,日期型转换为Long型用Date.ToFileTime()方法。另外还有一个ToFileTimeUtc()方法,两者在指定Kind的情况下是相同的,在没有指定Kind的情况下内容是不同的。
如下例中,DateTimeKind指定DateTime对象是表示本地时间、协调通用时间 (UTC),还是既不指定为本地时间,也不指定为 UTC。Local 表示的时间为本地时间。 Unspecified 表示的时间既未指定为本地时间,也未指定为协调通用时间 (UTC)。 Utc 表示的时间为 UTC。
欢迎光临 信息发布软件,b2b软件,广告发布软件 (http://postbbs.com/) | Powered by Discuz! X3.2 |