2016-07-28 15 views
2

Ich habe eine Anwendung, wo der Benutzer wählt Geburtsdatum mit einem DatePicker gemacht. Der Benutzer muss über 21 und unter 26 sein. Wenn der Benutzer über 21 und unter 26 ist, erscheint ein Nachrichtenfeld mit der Aufschrift "Erfolg". Wenn ich jedoch ein Geburtsdatum zwischen 21 und 25 auswähle, passiert nichts. Nicht sicher, was ich falsch hier zu tun, aber ich denke, es ist minusing 21 und 26 von meinem gewählten Zeitpunkt in meinem datePickerDatepicker zwischen zwei Alter 21 und 25 wpf

My-Code ist als Brachen

XAML

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

xaml.cs

DatePicker dp = new DatePicker(); 

      DateTime dateMinimum = dpkDOB.SelectedDate.Value.AddYears(-21); 
      DateTime dateMaximum = dpkDOB.SelectedDate.Value.AddYears(-26); // 26, as this would include somebody whose just below 26 years old 
      DateTime birthDate = Convert.ToDateTime(dp.SelectedDate); 

      if (birthDate > dateMinimum && birthDate < dateMaximum) 
      { 
       MessageBox.Show("Success"); 
      } 
+0

was, wenn man es durch Spuren geschieht dann? – BugFinder

+0

Ich weiß nicht wpf aber in jeder Plattform Datepickers ist etwas, was Sie wollen ein Plugin für – bresleveloper

+0

Wenn ich DOB wie 30/05/1994 zum Beispiel die 'dateMinimum' zeigt 30/05/1973 und die' dateMaximum' zeigt 30/05/1968 –

Antwort

2

Sie wählten die falsche DatePicker zum Vergleich:

DateTime birthDate = Convert.ToDateTime(dp.SelectedDate); 

sollte

DateTime birthDate = Convert.ToDateTime(dpkDOB.SelectedDate); 

Nach Kommentare:

DateTime birthDate = Convert.ToDateTime(dpkDOB.SelectedDate); 

if(birthDate > DateTime.Now.AddYears(-26) && birthDate < DateTime.Now.AddYears(-21)) 
{ 
    // do stuff 
} 

Wenn Sie diese öfter in Ihrer Lösung benötigen, denken Sie an eine Erweiterung wie folgt aus:

public static class Extensions 
{ 
    public static TimeSpan Age(this DateTime dt) 
    { 
     return (DateTime.Now - dt); 
    } 

    public static int Years(this TimeSpan ts) 
    { 
     return (int)((double)ts.Days/365.2425); 
    } 
} 

Verbrauch:

DateTime birthDate = Convert.ToDateTime(dpkDOB.SelectedDate); 

if (birthDate.Age().Years() > 21 && birthDate.Age().Years() < 26) 
{ 
    // do stuff 
} 
+0

Ich habe diesen Code hinzugefügt und es scheint immer noch nicht zu funktionieren. –

+0

Ihr Ziel ist es, einen Altersrange nach dem aktuellen Tag zu definieren, oder? – C4u

+0

Ja, der Benutzer muss ab dem heutigen Datum über 21 und weniger als 26 sein. Ich habe auch versucht, dieses 'dateMinimum = DateTime.Now.AddYears (-21);' zu verwenden, aber ich bekam einen Fehler auf "Now" –