如何仅从用户输入监听DateTimePicker ValueChanged事件

时间:2019-06-25 08:11:45

标签: c# winforms datetimepicker

我使用DateTimePicker Enter事件将“最大日期”设置为昨天的日期,因为我无法控制用户是否决定将应用程序保持打开状态数天。

我还使用DateTimePicker ValueChanged事件根据所选日期调整对话。

我面临的问题是,每次我通过Enter事件调整“最大日期”时,也会调用ValueChanged事件,并且从DateTimePicker获取的值不是用户值。我只能听用户的输入更改吗?

DateTimePicker CloseUp似乎有帮助,但前提是用户使用日历来选择日期而不是手动输入日期。

microsoft-project-vba

我希望ValueChanged事件仅由用户触发,而不由DateTimePicker的MaxDate更改触发。

1 个答案:

答案 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