Уменьшение даты при смене года - PullRequest
0 голосов
/ 31 октября 2018

Я использую два DatePicker в WinForm и пытаюсь сделать простую вещь. Всякий раз, когда я пытаюсь выбрать дату, скажем Дата начала , тогда Дата окончания должна уменьшаться на год. но есть условие. Пример, если Дата начала равно «10 -12-2018», тогда Дата окончания должно быть «10 -12-2017». Таким же образом, если Дата начала равна «10 -12-2017», то Дата окончания будет «10 -12-2016». Опять же, если Дата начала равна «10 -14-2017», то Дата окончания будет «10 -12-2016». Потому что день изменился, а не год.

Я пробовал использовать наоборот, что означает увеличение года с DatePicker значение изменило событие и было достаточно близко с следующее:

public frmDetails()
{
   InitializeComponent();
   dtPickerEnd.Value = dtPickerEnd.Value.AddYears(1); //By default adding one year for end date
}

При изменении даты начала:

private void dtPickerStart_ValueChanged(object sender, EventArgs e)
{
   if (dtPickerStart.Value.Year == dtPickerEnd.Value.Year) //If year is same, then increase year by one
   {
      dtPickerEnd.Value = dtPickerEnd.Value.AddYears(1);
   }
} 

Это работает, когда я увеличиваю дату начала, но не работает, когда я делаю обратное. Например, если Дата начала равна '10 -12-2018', то Дата окончания должна быть '10 -12-2019 '. Точно так же, если Дата начала равна '10 -12-2017', тогда Дата окончания будет '10 -12-2018 '. Но теперь я готов придерживаться убывающего года. К сожалению, я не получаю ожидаемый результат с этим:

private void dtPickerStart_ValueChanged(object sender, EventArgs e)
{
   if (dtPickerStart.Value.Year == dtPickerEnd.Value.Year) //If year is same, then increase year by one
   {
      dtPickerEnd.Value = dtPickerEnd.Value.AddYears(-1);
   }
} 

Ответы [ 2 ]

0 голосов
/ 31 октября 2018
public frmDetails()
{
    InitializeComponent();
    oldStartYear = dtPickerStart.Value.Year;
    dtPickerEnd.Value = dtPickerStart.Value.AddYears(1); // or -1
}

private int oldStartYear;

private void dtPickerStart_ValueChanged(object sender, EventArgs e)
{ 
    if (oldStartYear != dtPickerStart.Value.Year)
    {
        oldStartYear = dtPickerStart.Value.Year;
        dtPickerEnd.Value = dtPickerStart.Value.AddYears(1); // or -1
    }
}
0 голосов
/ 31 октября 2018

попробуйте это

Я пытался, и это сработало

    try
    {
    dateTimePicker2.Value = new DateTime(dateTimePicker1.Value.Year - 1, dateTimePicker1.Value.Month, dateTimePicker1.Value.Day);
    }
    catch
    {
     if(dateTimePicker1.Value.Month==2 && dateTimePicker1.Value.Day==29)
     {
       dateTimePicker2.Value = new DateTime(dateTimePicker1.Value.Year - 1, dateTimePicker1.Value.Month, dateTimePicker1.Value.Day-1);
     }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...