允许日期选择器输入没有分隔符的日期

时间:2014-05-03 04:04:00

标签: c# winforms datepicker

我有一个winform应用程序。我需要以这样一种方式编写代码:整个应用程序中的所有日期选择器都接受日期而不需要像/,等等任何分隔符。 这可行吗?如果是,我该怎么做?

我不想创建自定义控件,因为这意味着要在很多地方更改代码。

4 个答案:

答案 0 :(得分:1)

您可以这样做:

dateTimePicker1.Format = DateTimePickerFormat.Custom;
dateTimePicker1.CustomFormat = "yyyyMMdd";

当然,您可能希望自定义格式在某处成为“全局”常量。

或者创建一个将DateTimePicker作为参数并将其格式化的函数。

答案 1 :(得分:-1)

从我的脑海中可以想到的可能路径:

  1. 使用MaskedTextBox。它允许用户跳过键入分隔符。但是这种方法会从用户那里夺走日历功能。看看你的情景是否合适。
  2. 创建您自己的控件。这根本不是那么难。您只需捕获KeyDown并检查输入密钥。您可以在自定义控件中加入日历控件和TextBox,以使您的生活更轻松。

答案 2 :(得分:-1)

我遇到了这个问题,但我放弃了dateformatpickers并转向另一个方向。我不需要视觉日历,所以我做了你要求的,但是使用标准的文本框控件。我写了一个方法,我运行我的textbox.Text通过;它几乎需要每个半标准的日期分隔符,或者根本不需要分隔符,并创建标准化的日期输出。唯一的问题是我希望我的用户输入6或8个字符;我不想猜测1119901-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);            
    }

答案 3 :(得分:-1)

这是您的参考。

只要您想要检索日期/时间,就可以在您的选择器上放置一个小型适配器。此适配器会将用户提供的任何字符串格式转换为您的选择器可以使用模板接受的格式良好的字符串。 例如:

YourDatePicker.Date = dateAdapter.FormatBySlash("20140205","yyyymmdd")

您的适配器将实现一个解析器函数,该函数将给定格式的字符串转换为datepicker可以接受的字符串,例如。" yyyymmdd" to" 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类就足够了。只要您提供正确的格式模板,它就可以将任何字符串格式解析为有效的日期时间。