在软件开发中有时候需要收集日期或者时间等内容这时通常会用到时间控件今天我们以一些简单的小例子简述基于.NET的Windows窗体编程中时间控件进度条定时器BackgroundWorker的相关应用仅供学习分享使用如有不足之处还请指正。概述在WinForm窗体开发中与时间相关的控件主要有以下几种DateTimePicker 此控件允许用户从日期或时间列表中选择单个项。 用于表示日期时它会显示在两个部分一个下拉列表其中包含一个以文本表示的日期以及单击列表旁边的向下箭头时显示的网格。MonthCalendar 此控件提供直观的图形界面供用户查看和设置日期信息。 该控件显示一个网格其中包含月份的编号天数按一周中的天数下的列排列。 可以通过单击月份标题两侧的箭头按钮来选择其他月份。ProgressBar此控件通过显示水平条中排列的适当数量的矩形来指示某项操作的进度。Timer 此组件又称之为“定时器组件”一种按固定事件间隔引发事件的组件通过Timer控件可以定时执行某些操作。BackgroundWorker 此组件使窗体或控件能够异步运行操作 。说明MonthCalendar 可以选择日期范围;但是而DateTimePicker 控件允许设置时间和日期接下来分别介绍各个组件的使用方法。DateTimePickerDateTimePicker 控件允许用户从日期或时间列表中选择单个项。 用于表示日期时它会显示在两个部分一个下拉列表其中包含一个以文本表示的日期以及单击列表旁边的向下箭头时显示的网格。如果希望 DateTimePicker 控件显示为用于选取或编辑时间而不是日期的控件请将 ShowUpDown 属性设置为true该属性并将 Format 属性设置为 Time。DateTimePicker控件的关键属性如下所示ShowCheckBox当此属性设置为true时会在控件左侧显示一个复选框当勾选时才可以更新控件的值如果没有勾选则控件不可用。MinDate表示控件可以选择的最小日期MaxDate表示控件可以选择的最大日期。Value控件表示的日期/时间的值它是DateTime类型可以通过程序设置当前控件的值也可以获取用户设置的值。Format用于设置控件显示的日期/时间的格式它是一个枚举类型共有四个选项Long、ShortTimeCustom。 如果选择自定义格式则必须将 CustomFormat 属性设置为适当的字符串。CustomFormat用于格式化控件用于显示的日期/时间的自定义格式字符串。ShowUpDown用于标识当前控件是显示下拉日历还是数字显示框。DateTimePicker 的关键事件ValueChanged当控件的值发生变化时触发。首先拖动DateTimePicker控件到Form表单中并在Form的Load事件中设置控件的Form为自定义格式如下所示private void FrmDateTime_Load(object sender, EventArgs e) { this.dateTimePicker1.Format DateTimePickerFormat.Custom; this.dateTimePicker1.CustomFormat yyyy-MM-dd HH:mm:ss; }运行示例效果如下所示设置ShowUpDown为true时会在控件的右侧显示上下箭头选择需要修改的内容点击上下箭头进行修改如下所示MonthCalendarMonthCalendar控件提供直观的图形界面供用户查看和设置日期信息。 该控件显示一个网格其中包含月份的编号天数按一周中的天数下的列排列。 可以通过单击月份标题两侧的箭头按钮来选择其他月份。MonthCalendar控价的关键属性如下所示ShowToday表示是否在控件的底部显示“今天”日期ShowTodayCircle表示是否在“今天”日期前加上圆圈。ShowWeekNumbers表示是否在每行日期的左侧显示周数1-52表示当前是一年中的第几周。CalendarDimensions 可以水平和垂直显示多个月如Width2Height2表示控件上可以一次显示4个月。FirstDayOfWeek每周的第一天默认是周日为第一天它是一个枚举可选项MondayTuesday.....SundayDefault。BoldedDates表示需要加粗的显示的日期AnnuallyBoldedDates表示一年中需要加粗的日期MonthlyBoldedDates表示需要每个月加粗的显示的日期。SelectionRange控件中选择的日期范围MaxSelectionCount 表示可选择的最大天数。MinDate表示控件可以选择的最小日期MaxDate表示控件可以选择的最大日期。MonthCalendar的关键事件DateSelected当选择日期或范围时触发此事件。首先拖动MonthCalendar控件到Form表单中设置控件的CalendarDimensions属性如下所示设置控件的DataSelected事件此事件包含一个DateRangeEventArgs它包含StartEnd属性用于获取控件选择的起始日期和结束日期如下所示private void monthCalendar1_DateSelected(object sender, DateRangeEventArgs e) { this.lblMonth.Text $当前选择的是从{e.Start.ToShortDateString()}到{e.End.ToShortDateString()}; }运行示例效果如下所示ProgressBarProgressBar 控件通过显示水平条中排列的相应矩形数来指示进程的进度。 当过程完成后进度条会被填满。 进度栏通常用于让用户了解等待进程完成的时间例如加载大型文件时。ProgressBar控件的关键属性Value 表示已完成操作的进度。Minimum进度栏可以显示的最小值Maximum。 进度栏可以显示的最大值。Step表示当调用PeformStep时当前值的增量。Style用于设置ProgressBar的样式分别为BlocksContinuousMarquee首先拖动ProgressBar控件到Form表单中并在属性窗口中设置属性如下所示ProgressBar的默认效果如下所示说明设置ProgressBar的BackColorForeColor好像不起作用。TimerTimer 是一种按固定事件间隔引发事件的组件启用组件后每个间隔都会引发 Tick 事件。此组件专为 Windows 窗体环境设计。Timer组件的关键属性如下Interval 时间间隔以毫秒为单位本例是1000毫秒。Tick 定时触发的事件本例对应timer1_Tick事件方法。Start()Stop() 表示定时器的启动和停止。Enabled 表示定时器是否启用默认值为 false需要手动设置为true。首先拖动Timer控件到Form表单中它不会在Form表单中直接显示而是会显示在组件托盘中设置如下定义timer组件的Tick事件并在事件中编写相应的逻辑如在状态栏显示当前时间如下所示private void timer1_Tick(object sender, EventArgs e) { this.toolStripStatusLabel1.Text DateTime.Now.ToString(yyyy-MM-dd HH:mm:ss); }运行实例可以发现每隔1秒钟在状态栏中更新一下当前时间效果如下所示BackgroundWorker在实际应用中有许多执行的操作可能需要很长时间才能完成。 例如图像下载Web 服务调用文件下载和上传包括点对点应用程序复杂的本地计算数据库事务本地磁盘访问因为它相对于内存访问的速度较慢这样的操作可能会导致用户界面在正在运行时阻塞。 而BackgroundWorker则可以解决这种问题 它使你能够在不同于应用程序主 UI 线程的线程上异步执行耗时操作即“在后台”。BackgroundWorker关键属性如下所示WorkerReportsProgress表示是否更新执行进度。WorkerSupportsCancellation 表示运行的后台程序是否支持取消。BackgroundWorker的关键事件如下所示DoWork表示需要在后台执行的功能逻辑。ProgressChanged表示进度变化时触发此事件。RunWorkerCompleted表示后台任务执行完成时触发此事件。接下来模拟一个耗时10秒钟的下载操做看看是如果完成的。首先在Form表单中拖入控件包括两个按钮btnStartbtnStopBackgroundWorker组件状态栏StatusStrip包括显示状态和进度如下所示首先在Form的Load事件中初始化按钮状态如下所示private void FrmDownload_Load(object sender, EventArgs e) { this.btnStart.Enabled true; this.btnStop.Enabled false; }开始和停止事件逻辑如下所示private void btnStart_Click(object sender, EventArgs e) { this.backgroundWorker1.RunWorkerAsync(); this.toolStripStatusLabel1.Text 进行中; this.toolStripStatusLabel1.ForeColor Color.Red; this.btnStart.Enabled false; this.btnStop.Enabled true; } private void btnStop_Click(object sender, EventArgs e) { if (this.backgroundWorker1.IsBusy) { this.backgroundWorker1.CancelAsync(); this.btnStart.Enabled true; this.btnStop.Enabled false; } }BackgroundWorker的事件逻辑分别为DoWork事件用于耗时的下载ProgressChanged用于进度变化时更新状态栏的进度RunWorkerCompleted用于后台任务执行完成后更新状态信息如下所示private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { Download(); } private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e) { this.toolStripProgressBar1.Value e.ProgressPercentage; } private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { if (e.Cancelled) { this.toolStripStatusLabel1.Text 已取消; } else { this.toolStripStatusLabel1.Text 完成; this.toolStripStatusLabel1.ForeColor Color.Green; } this.btnStart.Enabled true; this.btnStop.Enabled false; } private void Download() { for (int i 0; i 100; i) { //执行下载操作 Thread.Sleep(100); this.backgroundWorker1.ReportProgress(i 1); } }在上述方法中每隔100毫秒调用一次ReportProgress方法上报进度会自动触发ProgressChanged事件然后更新状态栏的进度。运行示例代码如下所示以上就是《基于.NET的Windows窗体编程之WinForms时间控件》的全部内容旨在抛砖引玉一起学习共同进步
基于.NET的Windows窗体编程之WinForms时间控件
发布时间:2026/6/23 6:08:36
在软件开发中有时候需要收集日期或者时间等内容这时通常会用到时间控件今天我们以一些简单的小例子简述基于.NET的Windows窗体编程中时间控件进度条定时器BackgroundWorker的相关应用仅供学习分享使用如有不足之处还请指正。概述在WinForm窗体开发中与时间相关的控件主要有以下几种DateTimePicker 此控件允许用户从日期或时间列表中选择单个项。 用于表示日期时它会显示在两个部分一个下拉列表其中包含一个以文本表示的日期以及单击列表旁边的向下箭头时显示的网格。MonthCalendar 此控件提供直观的图形界面供用户查看和设置日期信息。 该控件显示一个网格其中包含月份的编号天数按一周中的天数下的列排列。 可以通过单击月份标题两侧的箭头按钮来选择其他月份。ProgressBar此控件通过显示水平条中排列的适当数量的矩形来指示某项操作的进度。Timer 此组件又称之为“定时器组件”一种按固定事件间隔引发事件的组件通过Timer控件可以定时执行某些操作。BackgroundWorker 此组件使窗体或控件能够异步运行操作 。说明MonthCalendar 可以选择日期范围;但是而DateTimePicker 控件允许设置时间和日期接下来分别介绍各个组件的使用方法。DateTimePickerDateTimePicker 控件允许用户从日期或时间列表中选择单个项。 用于表示日期时它会显示在两个部分一个下拉列表其中包含一个以文本表示的日期以及单击列表旁边的向下箭头时显示的网格。如果希望 DateTimePicker 控件显示为用于选取或编辑时间而不是日期的控件请将 ShowUpDown 属性设置为true该属性并将 Format 属性设置为 Time。DateTimePicker控件的关键属性如下所示ShowCheckBox当此属性设置为true时会在控件左侧显示一个复选框当勾选时才可以更新控件的值如果没有勾选则控件不可用。MinDate表示控件可以选择的最小日期MaxDate表示控件可以选择的最大日期。Value控件表示的日期/时间的值它是DateTime类型可以通过程序设置当前控件的值也可以获取用户设置的值。Format用于设置控件显示的日期/时间的格式它是一个枚举类型共有四个选项Long、ShortTimeCustom。 如果选择自定义格式则必须将 CustomFormat 属性设置为适当的字符串。CustomFormat用于格式化控件用于显示的日期/时间的自定义格式字符串。ShowUpDown用于标识当前控件是显示下拉日历还是数字显示框。DateTimePicker 的关键事件ValueChanged当控件的值发生变化时触发。首先拖动DateTimePicker控件到Form表单中并在Form的Load事件中设置控件的Form为自定义格式如下所示private void FrmDateTime_Load(object sender, EventArgs e) { this.dateTimePicker1.Format DateTimePickerFormat.Custom; this.dateTimePicker1.CustomFormat yyyy-MM-dd HH:mm:ss; }运行示例效果如下所示设置ShowUpDown为true时会在控件的右侧显示上下箭头选择需要修改的内容点击上下箭头进行修改如下所示MonthCalendarMonthCalendar控件提供直观的图形界面供用户查看和设置日期信息。 该控件显示一个网格其中包含月份的编号天数按一周中的天数下的列排列。 可以通过单击月份标题两侧的箭头按钮来选择其他月份。MonthCalendar控价的关键属性如下所示ShowToday表示是否在控件的底部显示“今天”日期ShowTodayCircle表示是否在“今天”日期前加上圆圈。ShowWeekNumbers表示是否在每行日期的左侧显示周数1-52表示当前是一年中的第几周。CalendarDimensions 可以水平和垂直显示多个月如Width2Height2表示控件上可以一次显示4个月。FirstDayOfWeek每周的第一天默认是周日为第一天它是一个枚举可选项MondayTuesday.....SundayDefault。BoldedDates表示需要加粗的显示的日期AnnuallyBoldedDates表示一年中需要加粗的日期MonthlyBoldedDates表示需要每个月加粗的显示的日期。SelectionRange控件中选择的日期范围MaxSelectionCount 表示可选择的最大天数。MinDate表示控件可以选择的最小日期MaxDate表示控件可以选择的最大日期。MonthCalendar的关键事件DateSelected当选择日期或范围时触发此事件。首先拖动MonthCalendar控件到Form表单中设置控件的CalendarDimensions属性如下所示设置控件的DataSelected事件此事件包含一个DateRangeEventArgs它包含StartEnd属性用于获取控件选择的起始日期和结束日期如下所示private void monthCalendar1_DateSelected(object sender, DateRangeEventArgs e) { this.lblMonth.Text $当前选择的是从{e.Start.ToShortDateString()}到{e.End.ToShortDateString()}; }运行示例效果如下所示ProgressBarProgressBar 控件通过显示水平条中排列的相应矩形数来指示进程的进度。 当过程完成后进度条会被填满。 进度栏通常用于让用户了解等待进程完成的时间例如加载大型文件时。ProgressBar控件的关键属性Value 表示已完成操作的进度。Minimum进度栏可以显示的最小值Maximum。 进度栏可以显示的最大值。Step表示当调用PeformStep时当前值的增量。Style用于设置ProgressBar的样式分别为BlocksContinuousMarquee首先拖动ProgressBar控件到Form表单中并在属性窗口中设置属性如下所示ProgressBar的默认效果如下所示说明设置ProgressBar的BackColorForeColor好像不起作用。TimerTimer 是一种按固定事件间隔引发事件的组件启用组件后每个间隔都会引发 Tick 事件。此组件专为 Windows 窗体环境设计。Timer组件的关键属性如下Interval 时间间隔以毫秒为单位本例是1000毫秒。Tick 定时触发的事件本例对应timer1_Tick事件方法。Start()Stop() 表示定时器的启动和停止。Enabled 表示定时器是否启用默认值为 false需要手动设置为true。首先拖动Timer控件到Form表单中它不会在Form表单中直接显示而是会显示在组件托盘中设置如下定义timer组件的Tick事件并在事件中编写相应的逻辑如在状态栏显示当前时间如下所示private void timer1_Tick(object sender, EventArgs e) { this.toolStripStatusLabel1.Text DateTime.Now.ToString(yyyy-MM-dd HH:mm:ss); }运行实例可以发现每隔1秒钟在状态栏中更新一下当前时间效果如下所示BackgroundWorker在实际应用中有许多执行的操作可能需要很长时间才能完成。 例如图像下载Web 服务调用文件下载和上传包括点对点应用程序复杂的本地计算数据库事务本地磁盘访问因为它相对于内存访问的速度较慢这样的操作可能会导致用户界面在正在运行时阻塞。 而BackgroundWorker则可以解决这种问题 它使你能够在不同于应用程序主 UI 线程的线程上异步执行耗时操作即“在后台”。BackgroundWorker关键属性如下所示WorkerReportsProgress表示是否更新执行进度。WorkerSupportsCancellation 表示运行的后台程序是否支持取消。BackgroundWorker的关键事件如下所示DoWork表示需要在后台执行的功能逻辑。ProgressChanged表示进度变化时触发此事件。RunWorkerCompleted表示后台任务执行完成时触发此事件。接下来模拟一个耗时10秒钟的下载操做看看是如果完成的。首先在Form表单中拖入控件包括两个按钮btnStartbtnStopBackgroundWorker组件状态栏StatusStrip包括显示状态和进度如下所示首先在Form的Load事件中初始化按钮状态如下所示private void FrmDownload_Load(object sender, EventArgs e) { this.btnStart.Enabled true; this.btnStop.Enabled false; }开始和停止事件逻辑如下所示private void btnStart_Click(object sender, EventArgs e) { this.backgroundWorker1.RunWorkerAsync(); this.toolStripStatusLabel1.Text 进行中; this.toolStripStatusLabel1.ForeColor Color.Red; this.btnStart.Enabled false; this.btnStop.Enabled true; } private void btnStop_Click(object sender, EventArgs e) { if (this.backgroundWorker1.IsBusy) { this.backgroundWorker1.CancelAsync(); this.btnStart.Enabled true; this.btnStop.Enabled false; } }BackgroundWorker的事件逻辑分别为DoWork事件用于耗时的下载ProgressChanged用于进度变化时更新状态栏的进度RunWorkerCompleted用于后台任务执行完成后更新状态信息如下所示private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { Download(); } private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e) { this.toolStripProgressBar1.Value e.ProgressPercentage; } private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { if (e.Cancelled) { this.toolStripStatusLabel1.Text 已取消; } else { this.toolStripStatusLabel1.Text 完成; this.toolStripStatusLabel1.ForeColor Color.Green; } this.btnStart.Enabled true; this.btnStop.Enabled false; } private void Download() { for (int i 0; i 100; i) { //执行下载操作 Thread.Sleep(100); this.backgroundWorker1.ReportProgress(i 1); } }在上述方法中每隔100毫秒调用一次ReportProgress方法上报进度会自动触发ProgressChanged事件然后更新状态栏的进度。运行示例代码如下所示以上就是《基于.NET的Windows窗体编程之WinForms时间控件》的全部内容旨在抛砖引玉一起学习共同进步