C#文本框短日期格式异常错误,Windows窗体应用程序

时间:2017-04-04 00:32:06

标签: c# date

我一直在寻找并尝试不到一个小时的事情。我不认为应该这么难,但是无论什么原因无论我改变什么,我都会在使用月球人选择日期时得到同样的错误。

我不确定我是否在某些地方做这件事,或者C#是不是我的气质。

正在使用的表单控件的一般描述 - 有两个文本框(textBox3和textBox4)两个按钮(button5和button6)和两个monthcalendars(monthcalendar1和2)

当您点击任一按钮时,它将显示该按钮的月历,button5-> monthcalendar1和button6-> monthcalendar2:您可以选择日期,并将该日期放入相应的textBox,mc1 - > textBox3,mc2-> textBox4

现在您应该了解哪些控件在哪里...这是我在用户选择日期时使用的代码,这对于mc1和2都类似,所以我可能只发布代码其中一个......

private void monthCalendar2_DateSelected(object sender, DateRangeEventArgs e)
    {
        textBox4.Text = monthCalendar2.SelectionStart.ToShortDateString();
        monthCalendar2.Location = new Point(306, 204);
        monthCalendar2.Visible = false; //306,204
    }

它将数据存储在textBox中,如下所示:m / d / yyyy,

所以我一直试图区分textBox3和textBox4中存储的日期;并尝试了多种代码配置以尝试使其工作,当选择textBox4的日期时,所有都返回格式异常代码错误::

private void monthCalendar1_DateChanged(object sender, DateRangeEventArgs e)
    {
        var startDate = DateTime.Parse(textBox3.Text);//, "M/d/yyyy", System.Globalization.CultureInfo.InvariantCulture);
        var endDate = DateTime.Parse(textBox4.Text);//, "M/d/yyyy"), System.Globalization.CultureInfo.InvariantCulture);
        TimeSpan dateDiff = endDate - startDate;
        string message = "";

        if (endDate < startDate)
        {
            message = "Your departure date must be before your return date.";
        }
        else if(dateDiff.TotalDays == 0 || dateDiff.TotalDays == 1)
        {
            message = "Only planning one day of travel, please select one of the other options or select a longer period of travel.";
        }
        else if(dateDiff.TotalDays >= 7)
        {
            message = "Traveling less than or equal to seven days is not enough, select another option or a longer travel period.";
        }
        else
        {
            message = "Have a wonderful trip!";
        }

        MessageBox.Show(message, "Trip Notice");

    }

我试过用:

DateTime startDate, endDate;
startDate = DateTime.ParseExact(textBox3.Text,"M/d/yyyy", System.Globalization.CultureInfo.InvariantCulture);
endDate = DateTime.ParseExact(textBox4.Text,"M/d/yyyy", System.Globalization.CultureInfo.InvariantCulture);

那也没用,所以我试过了::

DateTime startDate, endDate;
startDate = Convert.toDateTime(textBox3.Text); //did the same for textBox4

它也没用。我完全失去了,这里的大部分帖子让我在圈子里跑。请帮忙。

1 个答案:

答案 0 :(得分:2)

最可能的原因是DateChanged之前调用了DateSelected,而您的Text属性为空。这应该有效:

private void monthCalendar2_DateChanged(object sender, DateRangeEventArgs e)
{
    // Update the text in TextBox4 first...
    textBox4.Text = monthCalendar2.SelectionStart.ToShortDateString();

    var startDate = DateTime.Parse(textBox3.Text);
    var endDate = DateTime.Parse(textBox4.Text);

    // Rest of the code omitted...

我认为您的代码逻辑存在其他问题,但请查看是否有效。

P.S。这是另一个逻辑问题......你正在使用&#34;大于或等于&#34;而不是&#34;小于或等于&#34; ...

else if (dateDiff.TotalDays >= 7)
{
    message = "Traveling less than or equal to seven days is not enough, ...";
}