.net c#带掩码的文本框日期-设置
我有一个c#.net项目,需要一个日期值的输入文本框。我希望它显示默认值mm/dd/yyyy,然后允许用户输入有效日期 我尝试过使用屏蔽文本框,但它不喜欢上面的格式 如果我尝试使用//\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu 设置这样一个输入框的最佳方法是什么,有效地使用掩码,只允许数字和验证(尽管在这一点上我并不担心).net c#带掩码的文本框日期-设置,c#,.net,datetime,input,C#,.net,Datetime,Input,我有一个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窗体,因为没有指定平台。您是否计划本地化此应用程序?