我有一个winform应用程序。我需要以这样的方式编写代码,使应用程序中的所有日期选择器都接受日期,而不需要任何分隔符,例如 /、- 等。 这可行吗?如果是,我该怎么做?
我不想创建自定义控件,因为这意味着在很多地方更改代码。
你可以这样做:
dateTimePicker1.Format = DateTimePickerFormat.Custom;
dateTimePicker1.CustomFormat = "yyyyMMdd";
当然,您可能希望自定义格式在某个地方成为“全局”常量。
或者创建一个函数,将 DateTimePicker 作为参数并格式化它们。
我能想到的两条可能的路径:
KeyDown
并检查输入键即可。您可以在自定义控件中合并日历控件和文本框,让您的生活更轻松。我遇到了这个问题,但我放弃了日期格式选择器并转向了另一个方向。我不需要视觉日历,所以我做了你所要求的,但使用了标准的文本框控件。我编写了一个方法来运行我的 textbox.Text ;它几乎需要每个半标准日期分隔符,或者根本不需要分隔符,并创建一个标准化的日期输出。唯一的问题是我希望用户输入 6 或 8 个字符;我不想猜测
11199
是 01-11-1999
还是 11-01-1999
方法在这里
public static string ExpandingDates(string _date)
{
if (string.IsNullOrWhiteSpace(_date))
{
return "";
}
else
{
try
{
_date = _date.Replace("\\", "-");
_date = _date.Replace(",", "-");
if (!_date.Contains(".") & !_date.Contains("/") & !_date.Contains("-"))
{
if (_date.Length == 6)
{
_date = _date.Insert(2, "-").Insert(5, "-");
}
else if (_date.Length == 8)
{
_date = _date.Insert(2, "-").Insert(5, "-");
}
}
try
{
_date = Convert.ToDateTime(_date).ToShortDateString();
}
catch { _date = ""; }
}
catch
{
_date = "";
}
return _date;
}
}
这是我的实现方式。
private void txtPurDate_Validating(object sender, CancelEventArgs e)
{
txtPurDate.Text = ExpandingDates(txtPurDate.Text);
}
这是一个想法供您参考。
只要您想检索日期/时间,只需在选择器上放置一个小适配器即可。该适配器将使用模板将用户提供的任何字符串格式转换为选择器可接受的格式良好的字符串。 例如:
YourDatePicker.Date = dateAdapter.FormatBySlash("20140205","yyyymmdd")
您的适配器将实现一个解析器函数,将给定格式的字符串转换为日期选择器可以接受的字符串,例如“yyyymmdd”到“yyyy/mm/dd”,“yyyymmdd”到“yyyy-mm-dd”,等等
DateAdapter
{
public string FormatBySlash(string inputDate, string inputFormat)
{
string year = //pick 4 digits year from inputDate where inputFormat at "yyyy"
string month = //pick 2 digits month from inputDate where inputFormat at "mm"
string day = //pick 2 last digits day from inputDate where inputFormat at "dd"
return year + "/" + month + "/" + day
}
//implementation for other format method...
}
在CSharp语言中,使用DateTime类就完全足够了。只要您提供正确的格式模板,它就可以将任何字符串格式解析为有效的日期时间。