我使用DateTimePicker Enter事件将“最大日期”设置为昨天的日期,因为我无法控制用户是否决定将应用程序保持打开状态数天。
我还使用DateTimePicker ValueChanged事件根据所选日期调整对话。
我面临的问题是,每次我通过Enter事件调整“最大日期”时,也会调用ValueChanged事件,并且从DateTimePicker获取的值不是用户值。我只能听用户的输入更改吗?
DateTimePicker CloseUp似乎有帮助,但前提是用户使用日历来选择日期而不是手动输入日期。
microsoft-project-vba
我希望ValueChanged事件仅由用户触发,而不由DateTimePicker的MaxDate更改触发。
答案 0 :(得分:2)
使用布尔字段作为标志。
private bool isChangedFromCode = false;
private void dtpStartDate_Enter(object sender, EventArgs e)
{
isChangedFromCode = true;
// Reports cannot be generated later than today.
dtpStartDate.MaxDate = DateTime.Now.Date.AddDays(-1.0);
isChangedFromCode = false;
}
private void dtpStartDate_ValueChanged(object sender, EventArgs e)
{
if(isChangedFromCode) { return; }
// rest of the code here...
}
更新
在评论中进行对话-dtpStartDate_Enter
事件处理程序中的代码不是引发ValueChanged
事件的代码,因为它只会更改MaxDate
属性,而不会更改{ Value
的{1}}属性。
您需要使用该布尔标志来包装设置DateTimePicker
属性的代码的任何部分。
实际上,如果您在代码中有多个位置会更改值,并且仅使用此方法而不是直接设置Value
属性,那么我可能会使其成为一种方法:
Value