C# 检查年龄是否为<;18日期选择器wpf

C# 检查年龄是否为<;18日期选择器wpf,c#,wpf,C#,Wpf,我正在制作一个用户必须超过18岁的应用程序。如果他/她小于18岁,则会出现一个消息框显示“未成年”。我正在使用日期选择器来选择用户D.O.B。我的问题是我不完全确定如何编码,但我通过查看教程尝试了一下,但所有教程似乎都是日期选择器 我的代码如下: xaml xaml.cs int age = DateTime.Today.Year - tbkDOB.Value.Year; if (age < 18) { MessageBox.Show("Under age"); }

我正在制作一个用户必须超过18岁的应用程序。如果他/她小于18岁,则会出现一个
消息框
显示“未成年”。我正在使用
日期选择器
来选择用户D.O.B。我的问题是我不完全确定如何编码,但我通过查看教程尝试了一下,但所有教程似乎都是
日期选择器

我的代码如下:

xaml


xaml.cs

 int age = DateTime.Today.Year - tbkDOB.Value.Year;
 if (age < 18)
 {
     MessageBox.Show("Under age");
 }
int age=DateTime.Today.Year-tbkDOB.Value.Year;
if(年龄<18岁)
{
MessageBox.Show(“未成年”);
}

我已经在visual studio中进行了测试。请查找以下工作代码:

XAML:

<DatePicker HorizontalAlignment="Center" Name="dpkDOB" Grid.Column="1" 
   VerticalAlignment="Top" Grid.Row="1" 
   SelectedDateChanged="dpkDOB_SelectedDateChanged"/>

XAML.cs:

public MainWindow()
{
    InitializeComponent();
}

private void dpkDOB_SelectedDateChanged(object sender, SelectionChangedEventArgs e)
{
    var ageInYears = GetDifferenceInYears(dpkDOB.SelectedDate.Value, DateTime.Today);
    if (ageInYears < 18)
    {
        MessageBox.Show("Under age");
    }
}

int GetDifferenceInYears(DateTime startDate, DateTime endDate)
{
    return (endDate.Year - startDate.Year - 1) +
        (((endDate.Month > startDate.Month) ||
        ((endDate.Month == startDate.Month) && (endDate.Day >= startDate.Day))) ? 1 : 0);
}
public主窗口()
{
初始化组件();
}
私有无效dpkDOB_SelectedDateChanged(对象发送方,SelectionChangedEventArgs e)
{
var ageInYears=GetDifferenceInYears(dpkDOB.SelectedDate.Value,DateTime.Today);
如果(年龄<18岁)
{
MessageBox.Show(“未成年”);
}
}
int GetDifferenceInEars(日期时间开始日期、日期时间结束日期)
{
报税表(endDate.Year-startDate.Year-1)+
((endDate.Month>startDate.Month)||
((endDate.Month==startDate.Month)和&(endDate.Day>=startDate.Day))?1:0;
}

我已经在visual studio中进行了测试。请查找以下工作代码:

XAML:

<DatePicker HorizontalAlignment="Center" Name="dpkDOB" Grid.Column="1" 
   VerticalAlignment="Top" Grid.Row="1" 
   SelectedDateChanged="dpkDOB_SelectedDateChanged"/>

XAML.cs:

public MainWindow()
{
    InitializeComponent();
}

private void dpkDOB_SelectedDateChanged(object sender, SelectionChangedEventArgs e)
{
    var ageInYears = GetDifferenceInYears(dpkDOB.SelectedDate.Value, DateTime.Today);
    if (ageInYears < 18)
    {
        MessageBox.Show("Under age");
    }
}

int GetDifferenceInYears(DateTime startDate, DateTime endDate)
{
    return (endDate.Year - startDate.Year - 1) +
        (((endDate.Month > startDate.Month) ||
        ((endDate.Month == startDate.Month) && (endDate.Day >= startDate.Day))) ? 1 : 0);
}
public主窗口()
{
初始化组件();
}
私有无效dpkDOB_SelectedDateChanged(对象发送方,SelectionChangedEventArgs e)
{
var ageInYears=GetDifferenceInYears(dpkDOB.SelectedDate.Value,DateTime.Today);
如果(年龄<18岁)
{
MessageBox.Show(“未成年”);
}
}
int GetDifferenceInEars(日期时间开始日期、日期时间结束日期)
{
报税表(endDate.Year-startDate.Year-1)+
((endDate.Month>startDate.Month)||
((endDate.Month==startDate.Month)和&(endDate.Day>=startDate.Day))?1:0;
}


您目前看到的结果是什么?
tbkDOB
指的是什么?试着把18岁改成18岁,比如1997年,你是说
dpkDOB
而不是
tbkDOB
是的,我是说
dpkDOB
你还需要检查日期和月份-如果生日在一年的晚些时候,那么这个人可能是17岁。你最好的办法是将今天的日期减去18年,然后比较这两个日期。检查此处的日期和时间函数:您看到的当前结果是什么?
tbkDOB
指的是什么?试着把18岁改成18岁,比如1997年,你是说
dpkDOB
而不是
tbkDOB
是的,我是说
dpkDOB
你还需要检查日期和月份-如果生日在一年的晚些时候,那么这个人可能是17岁。你最好的办法是将今天的日期减去18年,然后比较这两个日期。检查此处的日期和时间函数:我收到一个错误,说明
datePicker
不包含值的定义。您要使用的属性是DisplayDate-检查文档:如原始答案中所述,此方法是错误的。幸运的是,dana给出了一个正确的算法,虽然它只有19票。我已经尝试过了,但是我得到了一个运行时“从Int32到DateTime的等价转换”,使用这个代码DateTime zeroTime=new DateTime(1,1,1)<代码>日期时间a=Convert.ToDateTime(dpkDOB.SelectedDate.Value.Year);DateTime b=Convert.ToDateTime(DateTime.Today.Year);时间跨度=b-a;//因为我们从公历的第一年开始,我们必须在这里减去一年。整数年=(零时间+跨度);如果(年岁<18){MessageBox.Show(“未成年”);}@CraigGallagher:很抱歉耽搁了。我离开办公桌很长时间了。我已经在VisualStudio中进行了测试,编辑了我的答案并添加了工作代码。请试一试。我收到一个错误,说
datePicker
不包含值的定义。您要使用的属性是DisplayDate-检查文档:如原始答案中所述,此方法是错误的。幸运的是,dana给出了一个正确的算法,虽然它只有19票。我已经尝试过了,但是我得到了一个运行时“从Int32到DateTime的等价转换”,使用这个代码DateTime zeroTime=new DateTime(1,1,1)<代码>日期时间a=Convert.ToDateTime(dpkDOB.SelectedDate.Value.Year);DateTime b=Convert.ToDateTime(DateTime.Today.Year);时间跨度=b-a;//因为我们从公历的第一年开始,我们必须在这里减去一年。整数年=(零时间+跨度);如果(年岁<18){MessageBox.Show(“未成年”);}@CraigGallagher:很抱歉耽搁了。我离开办公桌很长时间了。我已经在VisualStudio中进行了测试,编辑了我的答案并添加了工作代码。请试一试。