Как я могу выбрать текущую дату - PullRequest
0 голосов
/ 10 марта 2019

У меня есть DateTimePicker. По умолчанию отображается текущая дата. Чтобы выбрать дату с помощью календаря, я должен щелкнуть дату, а затем назначить DateTimePicker.Value переменной в обработчике событий DateTimePicker_ValueChanged. Когда я выбираю текущий день, событие DateTimePicker_ValueChanged не происходит. Как выбрать текущую дату с календарем? Пожалуйста помоги. Заранее спасибо.

1 Ответ

0 голосов
/ 10 марта 2019

Рассмотрим следующие факты:

  • Когда вы опускаете DateTimePicker в форме, для элемента управления не будет установлен Value, и элемент управления будет просто показывать DateTime.Now по умолчанию, без увеличения ValueChanged.

  • ValueChanged произойдет, если для элемента управления DateTimePicker явно задано другое значение Value.

Итак:

  1. Если вы не установили Value в конструкторе:

    • Когда форма загружается, ValueChanged не поднимется.
    • В первый раз, когда пользователь выберет сегодня, ValueChanged повысит.
  2. Если вы установили Value в конструкторе:

    • Когда форма загружается, ValueChanged поднимется.
    • В первый раз, когда пользователь выберет сегодня, ValueChanged не будет повышаться, поскольку в Value

Пример

Предположим, у вас есть такой код:

private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
{
    MessageBox.Show(date.ToString());
}

У вас есть некоторая логика в ValueChanged событии DateTimePicker, которое опирается на Value из DateTimePicker, и вы хотите, чтобы эта логика работала, когда пользователь выбирает дату, включая Сегодня. Но вы заметили, что при первом открытии формы ValueChanged не повышается.

Причина в том, что вы уронили DateTimePicker в форме, для элемента управления не будет установлено Value, и элемент управления просто показывает DateTime.Now по умолчанию, без повышения ValueChanged.

Вариант 1 - Установить DateTimePicker.Value явно в конструкторе или Загрузить

public Form1()
{
    InitializeComponent();
    dateTimePicker1.Value = DateTime.Now;
}
private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
{
    MessageBox.Show(date.ToString());
}

Вариант 2 - Инкапсулировать логику в методе и вызвать ее в конструкторе или Загрузить

Вы можете инкапсулировать логику в методе и вызвать метод в конструкторе или загрузить, передав DateTime.Now:

public Form1()
{
    InitializeComponent();
    DoSomething(DateTime.Now);
}
void DoSomething(DateTime date)
{
    MessageBox.Show(date.ToString());
}
private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
{
    DoSomething(dateTimePicker1.Value);
}
...