【问题标题】:check if age is <18 datepicker wpf检查年龄是否<18 datepicker wpf
【发布时间】:2016-12-02 17:05:59
【问题描述】:

我正在制作一个用户必须超过 18 岁的应用程序。如果他/她小于 18 岁,messageBox 会显示“未满年龄”。我正在使用 datePicker 来选择用户 D.O.B.我的问题是我不完全确定如何编写此代码,但我通过查看教程尝试了一下,但所有教程似乎都是dateTimePickers

我的代码如下:

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");
 }

【问题讨论】:

  • 您目前看到的结果是什么? tbkDOB 指的是什么?
  • 尝试添加全年而不是 18 年,例如 1997 年
  • 你的意思是dpkDOB而不是tbkDOB
  • 是的,我的意思是dpkDOB
  • 您还需要检查日期和月份 - 如果生日在当年晚些时候,则此人可能是 17 岁。最好的选择是从今天的日期减去 18 年并比较两个日期。在此处查看日期和时间功能:msdn.microsoft.com/en-us/library/…

标签: c# wpf


【解决方案1】:

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

【讨论】:

  • 我收到一条错误消息,提示 datePicker 不包含值的定义。
  • 您要使用的属性是 DisplayDate - 查看文档:msdn.microsoft.com/en-us/library/…
  • 这里stackoverflow.com/questions/4127363/…的原始答案中所述,这种方法是错误的。幸运的是,dana 给出了一个正确的算法,尽管它只有 19 票。
  • 我已经尝试过了,但是我使用此代码 DateTime zeroTime = new DateTime(1, 1, 1); 获得了运行时“Ivaled cast from Int32 to DateTime”; DateTime a = Convert.ToDateTime( dpkDOB.SelectedDate.Value.Year); DateTime b = Convert.ToDateTime( DateTime.Today.Year); TimeSpan span = b - a; // because we start at year 1 for the Gregorian // calendar, we must subtract a year here. int years = (zeroTime + span).Year - 1; if (years &lt; 18) { MessageBox.Show("Under age"); }
  • @CraigGallagher:抱歉耽搁了。我离开办公桌很长一段时间。我已经在 Visual Studio 中进行了测试并编辑了我的答案并添加了工作代码。请尝试一下。
猜你喜欢
  • 2022-01-22
  • 2019-03-14
  • 2010-12-21
  • 1970-01-01
  • 2021-01-13
  • 2018-05-11
  • 2017-11-27
  • 1970-01-01
  • 2011-05-15
相关资源
最近更新 更多