【问题标题】:TextBox Date Validation文本框日期验证
【发布时间】:2013-02-24 20:39:30
【问题描述】:

我正在使用以下代码进行短日期验证。

DateTime dt = DateTime.Now;
Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("fr-FR");
if (DateTime.TryParse(textBox1.Text, out dt))
{ textBox1.Text = dt.ToShortDateString(); }

但是有一个小问题,如果用户输入 1/1/1,输出看起来像 01/01/2001。

如果用户输入 1-1-1,输出看起来像 01/01/2001。因为我给的格式。

现在我想要什么,如果用户输入 1-1-1 输出应该是 01-01-2001。

【问题讨论】:

  • 尝试使用制作的文本框......这是一个更好的选择......
  • 无论用户输入什么格式的日期 -> 在字符串被解析为 DateTime 之后 -> 它总是以相同的方式显示。因为它是相同的 DateTime 值 -> 只有输入不同。
  • @sree aneev 所以你想根据输入得到输出吗?表示如果您输入 1/1/1,您想要 01/01/2001,如果用户输入 1-1-1,您想要 01-01-2001。是这样吗???
  • @kashif 对,我想要那样有机会吗...

标签: c# winforms date textbox cultureinfo


【解决方案1】:

试试这个:

dt.ToString(@"dd-MM-yyyy");

如果你想根据输入区分输出,我建议这样做:

if (textbox1.Text.Contains("/"))
{
    textBox1.Text = dt.ToString(@"dd/MM/yyyy");
}
else
{
    textBox1.Text = dt.ToString(@"dd-MM-yyyy");
}

【讨论】:

  • 对于这个 1/1/1 我能做什么我想要两个都按照用户
  • @Matus 是我为你的回答投票赞成。但与此相反,我问提问者为什么不使用 MaskTextBox。如果我是他,我至少不会将 TextBox 用于日期目的。
【解决方案2】:

我不明白你为什么在这种情况下使用 TextBox 而不是 MaskedTextBox。 我建议您为此使用 MaskedTTextBox。将两个 MaskedTextBox 从 ToolBox 拖放到您的 Form 并在 FormLoadEvent 中使用此代码

maskedTextBox1.Mask = "##/##/####";
maskedTextBox2.Mask = "##-##-####";

【讨论】:

  • 注意:我使用了两个 MaskedBoxes 来向您展示您可以使用任何类型的所需格式。您甚至可以根据自己的要求手动设置。
  • 但他想根据用户在同一个文本框中的输入以两种不同的方式格式化日期
  • 只要尝试一件事@kashif,如果他输入 1/1/1 你的第一个“##/##/####”的答案应该是上面那个答案应该是1//1//1。这是错误的。
猜你喜欢
  • 1970-01-01
  • 2012-03-10
  • 2011-12-07
  • 2011-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-11
相关资源
最近更新 更多