Ошибка исключения краткого формата даты c# textbox, приложение Windows Forms



Я искал и пробовал все это чуть меньше часа. Я не думаю, что это должно быть так трудно сделать, но по какой-либо причине, независимо от того, что я изменяю, я получаю ту же ошибку при использовании monthcalander для выбора даты.



Я не уверен, делаю ли я это где-то или это C# темпераментно со мной.



Некоторое общее описание используемых элементов управления формой - есть два текстовых поля (textBox3 и textBox4), две кнопки (button5 и button6) и два monthcalendars (monthcalendar1 и 2)



При нажатии на любую кнопку он покажет календарь месяца для этой кнопки, button5 - >monthcalendar1, и button6 - >monthcalendar2: вы можете выбрать дату, и он поместит эту дату в соответствующее текстовое поле, mc1 - >textBox3, mc2 - >textBox4



Теперь, когда вы должны иметь некоторые детали о том, какие элементы управления идут куда... Это код, который я использую, когда пользователь выбирает дату, это похоже как для mc1, так и для 2, поэтому я, вероятно, только опубликую код для 1 из них....



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


Он хранит данные в текстовом поле следующим образом: 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


Это тоже не сработало. Я в полной растерянности, и большинство этих постов заставляют меня бегать по кругу. Пожалуйста помочь.

506   1  

1 ответ:

Это скорее всего потому, что 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. Это другая логическая проблема...вы используете "больше или равно" вместо "меньше или равно"...
else if (dateDiff.TotalDays >= 7)
{
    message = "Traveling less than or equal to seven days is not enough, ...";
}

Comments

    Ничего не найдено.