我有一个日期的蒙面文本框:
<xctk:MaskedTextBox x:Name="txtDataNasc" Mask="##/##/####" HorizontalAlignment="Left" Height="27" TextWrapping="Wrap" VerticalAlignment="Top" Width="199" Margin="121,133,0,0" TextChanged="txtDataNasc_TextChanged"/>
在该文本框Text_Changed
属性上,我将其值解析为DateTime:
_student.Student_birthDate = DateTime.ParseExact(txtDataNasc.Text.ToString(), "yyyy-MM-dd h:mm tt", CultureInfo.InvariantCulture);
但它不是有效的DateTime字符串。我试过了:
stg.Replace("/", "-").Replace("#", "");
但它仍然保留textMask。如何在解析时删除掩码?
TextChanged
上的所有内容都是这样的:
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 :(得分:2)
掩码是掩码,值是值。两件不同的事情。此外,您的面具与yyyy-MM-dd格式不匹配,因此DateTime.ParseExact
方法始终会失败。您发布的示例代码没有多大意义。试试这个:
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;
}
}
}
如果您在TextBox中输入29-01-2017,这将有效。如果要使用其他日期格式,则应修改传递给DateTime.TryParseExact
方法的格式字符串以及MaskedTextBox
的Mask属性值。
另请注意,您无法将字符串转换为有效的DateTime
并设置Student_birthDate属性,直到将完整日期输入MaskedTextBox
。