Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net c#带掩码的文本框日期-设置_C#_.net_Datetime_Input - Fatal编程技术网

.net c#带掩码的文本框日期-设置

.net c#带掩码的文本框日期-设置,c#,.net,datetime,input,C#,.net,Datetime,Input,我有一个c#.net项目,需要一个日期值的输入文本框。我希望它显示默认值mm/dd/yyyy,然后允许用户输入有效日期 我尝试过使用屏蔽文本框,但它不喜欢上面的格式 如果我尝试使用//\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu 设置这样一个输入框的最佳方法是什么,有效地使用掩码,只允许数字和验证(尽管在这一点上我并不担心)

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

我尝试过使用屏蔽文本框,但它不喜欢上面的格式

如果我尝试使用//\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

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


这似乎很简单,但事实并非如此。

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


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

为什么不尝试使用jQuery UI DatePicker之类的插件呢


它们重量轻,经过测试,节省了工作量

假设使用Windows窗体,则是作业的工具

这里有一个例子,但既然你们说它不起作用

另一个很好的尝试是,如果您正在使用
数据绑定
,如果通过实例化()类并处理其和事件(这些似乎不存在于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.
}

为日期使用屏蔽文本框是一件令人头痛的事情,最好将
DateTime.TryParseExact()
与控件验证事件一起使用

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

您还需要使用
工具提示
来指导用户正确输入

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();
        }
       }
以及
工具提示
类:

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

我问了一个类似的问题(但具体是关于AjaxControlToolkit的MaskedEditExtender的问题)-公认的答案在您的场景中可能也很有用-我在回答中假设了Windows窗体,因为没有指定平台。您是否计划本地化此应用程序?