2017-01-29 3 views
0

Ich habe eine maskierte Textbox für Datum:Wie Maske beim Parsing entfernen?

<xctk:MaskedTextBox x:Name="txtDataNasc" Mask="##/##/####" HorizontalAlignment="Left" Height="27" TextWrapping="Wrap" VerticalAlignment="Top" Width="199" Margin="121,133,0,0" TextChanged="txtDataNasc_TextChanged"/> 

Und auf dieser Textbox Text_Changed Eigenschaft analysieren ich es Wert Datetime ist:

_student.Student_birthDate = DateTime.ParseExact(txtDataNasc.Text.ToString(), "yyyy-MM-dd h:mm tt", CultureInfo.InvariantCulture); 

Aber es ist keine gültige Datetime-String. Ich habe versucht:

stg.Replace("/", "-").Replace("#", ""); 

Aber es hält immer noch die textMask. Wie entferne ich die Maske beim Parsen?

Das alles, was auf TextChanged sieht wie folgt aus:

string stg = txtDataNasc.Text.ToString(); 
stg.Replace("/", "-").Replace("#", ""); 
stg = stg + " 00:00:00"; 
_student.Student_birthDate = DateTime.ParseExact(txtDataNasc.Text.ToString(), "yyyy-MM-dd h:mm tt", CultureInfo.InvariantCulture); 
+0

Ihre 'Maske' und Ihr Format stimmt nicht überein, soweit ich sehen kann. Warum verwendest du nicht einfach "MM/TT/JJJJ" oder "TT/MM/JJJJ" (ich weiß nicht, welches Recht)? Warum brauchst du 'h: mm tt ', wenn deine MaskedTextBox es ** nicht ** hat? Sie müssen diese 'stg'-Saite überhaupt nicht verwenden **, da Sie sie nirgendwo verwenden **. Diese 'Replace'-Methode gibt auch eine neue String-Instanz zurück. Sie können/können die aktuelle Instanz nicht ändern, da Strings unveränderlich sind. –

+0

Nur 'DateTime.ParseExact (txtDataNasc.Text," MM/TT/JJJJ ", CultureInfo.InvariantCulture)' oder 'DateTime.ParseExact (txtDataNasc.Text," TT/MM/JJJJ ", CultureInfo.InvariantCulture)' (abhängig von was '##' ist Tage oder Monate) scheint genug zu benutzen. –

Antwort

1

Eine Maske ist eine Maske und ein Wert ist ein Wert. Zwei verschiedene Dinge. Auch Ihre Maske stimmt nicht mit dem JJJJ-MM-TT-Format überein, so dass die Methode DateTime.ParseExact immer fehlschlägt. Der von Ihnen gepostete Beispielcode ist nicht sehr sinnvoll. Versuchen Sie dies:

private void txtDataNasc_TextChanged(object sender, TextChangedEventArgs e) 
{ 
    string stg = txtDataNasc.Text; 
    if (!string.IsNullOrEmpty(stg)) 
    { 
     stg += " 00:00:00"; 

     DateTime date = default(DateTime); 
     if (DateTime.TryParseExact(stg, "dd-MM-yyyy hh:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.None, out date)) 
     { 
      _student.Student_birthDate = date; 
     } 
    } 
} 

Dies wird funktionieren, wenn Sie in 29.01.2017 in die TextBox einfügen. Wenn Sie ein anderes Datumsformat verwenden möchten, sollten Sie die Formatzeichenfolge, die Sie an die DateTime.TryParseExact-Methode übergeben, sowie den Wert der Mask-Eigenschaft der MaskedTextBox ändern.

Beachten Sie auch, dass Sie nicht in der Lage sein wird, den String in einen gültigen DateTime und stellen Sie die Student_birthDate Eigentum, bis der vollständige Datum in die MaskedTextBox eingegeben wurde zu konvertieren.