我有一个dateTimePicker。默认情况下,它显示当前日期。为了通过日历选择日期,我必须单击一个日期,然后将dateTimePicker.value分配给dateTimePicker_valuechanged事件处理程序中的变量。当我选择当前一天时,不会发生DateTimePicker_valuechanged事件。如何使用日历选择当前日期?请帮忙。预先感谢您。
考虑以下事实:
-
当您在表单上删除
DateTimePicker
时,将没有为控件设置Value
,并且该控件默认情况下仅显示DateTime.Now
,而不会升高ValueChanged
。 -
ValueChanged
事件将在DateTimePicker
Control设置不同的Value
时提高事件。
so:
-
如果您没有在构造函数中设置
Value
:- 当表格加载时,
ValueChanged
不会提出。 - 用户今天第一次选择,
ValueChanged
将升高。
- 当表格加载时,
-
如果在构造函数中设置了
Value
:- 当表格加载时,
ValueChanged
将升高。 - 用户今天第一次选择,
ValueChanged
不会提出,因为Value
没有变化
- 当表格加载时,
示例
假设您有这样的代码:
private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
{
MessageBox.Show(date.ToString());
}
您在DateTimePicker
的ValueChanged
事件中具有一些逻辑,该逻辑依赖于DateTimePicker
的Value
,并且在用户选择日期(包括今天)时,您希望该逻辑运行。但是您的观察是,表格首次打开,ValueChanged
不会提出。
原因是您在表单上删除DateTimePicker
,没有为控件设置Value
,并且该控件默认情况下仅显示DateTime.Now
,而不会提高ValueChanged
。
选项1-在构造函数或LOAD中明确设置DateTimePicker.Value
public Form1()
{
InitializeComponent();
dateTimePicker1.Value = DateTime.Now;
}
private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
{
MessageBox.Show(date.ToString());
}
选项2-将逻辑封装在方法中,并将其称为构造函数或load
您可以将逻辑封装在方法中,并通过传递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);
}