Рассмотрим следующие факты:
Когда вы опускаете DateTimePicker
в форме, для элемента управления не будет установлен Value
, и элемент управления будет просто показывать DateTime.Now
по умолчанию, без увеличения ValueChanged
.
ValueChanged
произойдет, если для элемента управления DateTimePicker
явно задано другое значение Value
.
Итак:
Если вы не установили Value
в конструкторе:
- Когда форма загружается,
ValueChanged
не поднимется.
- В первый раз, когда пользователь выберет сегодня,
ValueChanged
повысит.
Если вы установили 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);
}