请用WPF写一个预约一周之内做某件事。可以设置预约的时间,包含小时和分钟,若过了这个时间点,则弹窗提醒
时间: 2024-03-05 07:51:30 浏览: 20
好的,以下是我用WPF写的预约功能的示例代码:
首先,我们需要在XAML中创建一个日期选择器和时间选择器,以便用户可以设置预约时间:
```xml
<DatePicker x:Name="datePicker" Margin="10"/>
<TimePicker x:Name="timePicker" Margin="10"/>
```
然后,我们需要在代码中获取用户设置的日期和时间,并计算出预约时间点:
```csharp
DateTime appointmentTime = datePicker.SelectedDate.Value.Date + timePicker.SelectedTime.Value.TimeOfDay;
```
接下来,我们需要在定时器中定期检查当前时间是否已经超过预约时间点:
```csharp
DispatcherTimer timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromSeconds(1);
timer.Tick += (sender, e) =>
{
if (DateTime.Now >= appointmentTime)
{
MessageBox.Show("时间到了,该去做事了!");
timer.Stop();
}
};
timer.Start();
```
最后,我们需要确保用户不能设置过去的日期和时间:
```csharp
datePicker.BlackoutDates.Add(new CalendarDateRange(DateTime.MinValue, DateTime.Today.AddDays(-1)));
timePicker.ValueChanged += (sender, e) =>
{
if (DateTime.Now >= appointmentTime)
{
MessageBox.Show("不能选择过去的时间!");
timePicker.Value = DateTime.Now.TimeOfDay;
}
};
```
完整的XAML代码如下:
```xml
<Window x:Class="AppointmentReminder.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="预约提醒" SizeToContent="WidthAndHeight">
<StackPanel>
<TextBlock Text="请选择预约日期:" Margin="10"/>
<DatePicker x:Name="datePicker" Margin="10"/>
<TextBlock Text="请选择预约时间:" Margin="10"/>
<TimePicker x:Name="timePicker" Margin="10"/>
</StackPanel>
</Window>
```
完整的C#代码如下:
```csharp
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Threading;
namespace AppointmentReminder
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
datePicker.BlackoutDates.Add(new CalendarDateRange(DateTime.MinValue, DateTime.Today.AddDays(-1)));
timePicker.Value = DateTime.Now.TimeOfDay;
DispatcherTimer timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromSeconds(1);
timer.Tick += (sender, e) =>
{
DateTime appointmentTime = datePicker.SelectedDate.Value.Date + timePicker.SelectedTime.Value.TimeOfDay;
if (DateTime.Now >= appointmentTime)
{
MessageBox.Show("时间到了,该去做事了!");
timer.Stop();
}
};
timer.Start();
timePicker.ValueChanged += (sender, e) =>
{
DateTime appointmentTime = datePicker.SelectedDate.Value.Date + timePicker.SelectedTime.Value.TimeOfDay;
if (DateTime.Now >= appointmentTime)
{
MessageBox.Show("不能选择过去的时间!");
timePicker.Value = DateTime.Now.TimeOfDay;
}
};
}
}
}
```