Ошибка исключения краткого формата даты 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
Это тоже не сработало. Я в полной растерянности, и большинство этих постов заставляют меня бегать по кругу. Пожалуйста помочь.
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