【问题标题】:How to remove mask on parsing?如何在解析时删除掩码?
【发布时间】:2017-01-29 16:10:37
【问题描述】:

我有一个蒙版的日期文本框:

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

但这不是一个有效的日期时间字符串。我试过了:

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

【问题讨论】:

  • 您的Mask 和您的格式在我看来不匹配。为什么不只使用MM/dd/yyyydd/MM/yyyy(我不知道哪个是正确的)来代替?如果您的 MaskedTextBox 没有有它,为什么还需要 h:mm tt 部分?您根本不需要使用这个stg 字符串因为您不会在任何地方使用它。此外,这些Replace 方法返回一个新的字符串实例。他们不/不能修改当前实例,因为字符串是不可变的。
  • 只需DateTime.ParseExact(txtDataNasc.Text, "MM/dd/yyyy", CultureInfo.InvariantCulture)DateTime.ParseExact(txtDataNasc.Text, "dd/MM/yyyyy", CultureInfo.InvariantCulture)(取决于## 是几天还是几个月)似乎足以使用它。

标签: c# wpf parsing datetime format


【解决方案1】:

掩码是掩码,值是值。两种不同的东西。此外,您的掩码与 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 属性值。

另请注意,在将完整日期输入MaskedTextBox 之前,您将无法将字符串转换为有效的DateTime 并设置Student_birthDate 属性。

【讨论】:

    猜你喜欢
    • 2018-09-09
    • 1970-01-01
    • 2012-07-29
    • 2021-09-28
    • 1970-01-01
    • 1970-01-01
    • 2016-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多