2017-04-04 14 views
2

私は少し時間を探して試してきました。これは難しいとは思っていませんが、何の理由であっても私は何を変えても、月のカレンダーを使って日付を選択するときに同じエラーが発生します。C#textbox短い日付書式例外エラー、Windowsフォームアプリケーション

私はそれをどこでやっているのか分かりません。もしC#が私と気分が悪いのであれば。

使用中のフォームコントロールのいくつかの一般的な説明 - 2つのテキストボックス(textBox3とtextBox4)2つのボタン(ボタン5とbutton6)と2 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 
    } 

それはそうのようなテキストボックスにデータを格納します。だから私はtextBox3に格納されている日付の間の差を取得しようと、textBox4されており、M/D/YYYYを

;そしてtextBox4ためTEH日付が選択されている場合、すべての形式の例外コードエラーで戻ってきて、それが動作するように取得しようとするコードのnumourous構成を試してみました::

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 

それはどちらか動作しませんでしたしなかったこと。私は完全な喪失に瀕しています。そして、これらの投稿のほとんどが私をサークルで走らせています。助けてください。

+0

' DateTime.ParseExact(使用して成功するために)の「以上」を使用しています文字列を 'DateTime'に変換するには、入力文字列が、使用される書式文字列で指定された書式と完全に一致していなければなりません。 – STLDeveloper

+0

ToShortDateString()を使用する代わりに、ToString()を使用して書式を指定して、構文解析時に同じになるように指定することができます。 ToShortDateStringはカルチャに依存します。 – Etienne

+0

@Etienne - ありがとう、私はあなたが最も "MM-dd-yyyy"を見たものにtextBoxesに入る値の書式を変更することができた、私はまた正確なParseに戻って日付形式を変更したそこに私はtoString()を設定し、悲しいことに私は同じ応答を得ました...それでもStringは有効なDateTimeとして認識されなかったと言っています.... –

答えて

2

DateSelectedより前にDateChangedが呼び出され、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.これは、他のロジックの問題です...あなたの代わりに `「より小さいか等しい」...

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

それは正確な問題でした。ありがとうございます@Rufus L、 DateChangedからDateSelectedにコードを移動すると、ロジックが動作するようになりました。ありがとうございました。 –

+0

他のロジックの問題を修正し、コードをテストしました - ありがとう –

関連する問題