2016-07-28 94 views
0

我正在提出申请,其中用户必须超过18岁。如果他/她小于18,则messageBox会显示“年龄不足”。我正在使用datePicker来选择用户D.O.B。我的问题是我不完全确定如何编写代码,但我通过查看教程给了它一个去,但所有的教程似乎是dateTimePickers检查年龄是否<18 datepicker wpf

我的代码如下:

XAML

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

xaml.cs

int age = DateTime.Today.Year - tbkDOB.Value.Year; 
if (age < 18) 
{ 
    MessageBox.Show("Under age"); 
} 
+0

什么是你所看到的目前的结果?什么是'tbkDOB'指的是什么? – Josh

+0

尝试添加全年而不是18例如1997 – Werdna

+0

你是不是指'dpkDOB'而不是'tbkDOB' – ViVi

回答

2

我在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); 
} 
+0

我收到一个错误,说'datePicker'不包含定义为了价值。 –

+0

您要使用的属性是DisplayDate - 请检查文档:https://msdn.microsoft.com/en-us/library/system.windows.controls.datepicker(v=vs.110).aspx – PaulF

+0

如上所述原始答案在这里http://stackoverflow.com/questions/4127363/date-difference-in-years-c-sharp,这种方法是错误的。幸运的是,dana给出了一个正确的算法,尽管它只有19票。 – Haukinger