【问题标题】:.net c# text box date with mask - setup.net c# 带掩码的文本框日期 - 设置
【发布时间】:2010-05-20 00:48:13
【问题描述】:

我有一个 c# .net 项目,想要一个日期值的输入文本框。我希望它显示默认值 mm/dd/yyyy,然后允许用户输入有效日期。

我曾尝试使用蒙版文本框,但它不喜欢上述格式。

如果我尝试使用 //____ 看起来很糟糕,00/00/0000 也是如此,当然如果你像 03/11/2009 这样输入“0”,你会得到 3/11/ 29,因为 0 作为掩码的一部分被删除。

设置这样的输入框的最佳方法是什么,有效地使用掩码,只允许数字和验证(尽管此时我并不那么担心)。

这看起来很简单,其实不然。

【问题讨论】:

  • 我问了一个类似的问题(但特别是关于 AjaxControlToolkit 的 MaskedEditExtender) - 接受的答案在您的场景中也可能有用 - stackoverflow.com/questions/1837200/…
  • 我在我的回答中假设了 Windows 窗体,因为没有指定平台。
  • 您打算本地化此应用程序吗?

标签: c# .net datetime input


【解决方案1】:

尝试检查 OnChange 事件中的日期。检查文本的长度,在适当的时候添加 /。

或者,看看 DatePicker 是否是更好的选择...

【讨论】:

    【解决方案2】:

    为什么不尝试使用像 jQuery UI DatePicker 这样的插件呢?

    http://docs.jquery.com/UI/Datepicker

    它们是轻量级的,经过测试并且可以节省工作量!

    【讨论】:

      【解决方案3】:

      假设 Windows 窗体,DateTimePicker 是完成这项工作的工具。

      这是MaskedTextBox 的示例,但既然你说它不起作用...

      另一个很好的尝试,如果你使用DataBinding,如果通过实例化Binding (Binding for WPF) 类并处理它的ParseFormat 事件(这些似乎不存在于 WPF ,但一定有办法)。

      简而言之:

      Binding b = new Binding("Text", BindingSourceInstance, "data.DateCreated");
      b.Parse += new EventHandler(b_Parse);
      b.Format += new EventHandler(b_Format);
      
      private void b_Format(object sender, ConvertEventArgs e) {
          if (e.DesiredType != typeof(DateTime)) return;
      
          e.Value.ToString("dd/MM/yyyy");
          // Or you may prefer some other variants:
          // e.Value.ToShortDateString();
          // e.Value.ToLongDateString();
          // e.Value.ToString("dd/MM/yyyy", CultureInfo.CurrentCulture.DateTimeInfo.ShortDatePattern);
      }
      
      private void b_Parse(object sender, ConvertEventArgs e) {
          // Choose whether you to handle perhaps bad input formats...
      
          e.Value = DateTime.Parse(e.Value, CultureInfo.InvariantCulture); // The CultureInfo here may be whatever you choose.
      }
      

      【讨论】:

        【解决方案4】:

        使用蒙版文本框显示日期是一件令人头疼的事情,最好使用DateTime.TryParseExact() 与控件验证事件。

        它将保证用户以正确的格式输入,而无需过多的编码,如下例所示:

        您还需要使用ToolTip 来指导用户正确输入。

        private void txtEntryDate_Validated(object sender, EventArgs e)
           {
             if (!string.IsNullOrEmpty(txtEntryDate.Text))
               {
                 DateTime entryDate;
                if (DateTime.TryParseExact(txtEntryDate.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out entryDate))
               {
                 // further actions for validations
               }
               else
               {
               setTooltip(txtEntryDate, "txtEntryDate", "Invalid date format date must be formatted to dd/MM/yyyy");
                        txtEntryDate.Focus();
                }
                }
                else
                {
                setTooltip(txtEntryDate, "txtEntryDate", "Please provide entry date in the format of dd/MM/yyyy");
                txtEntryDate.Focus();
                }
               }
        

        还有ToolTip 类:

        private void setTooltip(Control Ctrl, string CtrlCaption, string ToolTipMsg)
                {
                    ToolTip tt1 = new ToolTip();
                    tt1.AutoPopDelay = 5000;
                    tt1.InitialDelay = 1000;
                    tt1.ReshowDelay = 500;
                    tt1.ShowAlways = false;
                    tt1.SetToolTip(Ctrl, CtrlCaption);
                    tt1.Show(ToolTipMsg, Ctrl,5000);
                }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-03-07
          • 2018-06-23
          • 1970-01-01
          • 2016-06-11
          • 2021-04-18
          • 2011-03-21
          • 2011-01-16
          相关资源
          最近更新 更多