日期时间选取器离开/值更改事件

本文关键字:事件 离开 时间 选取 日期 | 更新日期: 2023-09-27 17:56:31

我有一个简单的小对话框,让用户设置一个"时间块"。 用户指示块的指定开始时间,然后可以输入持续时间,也可以输入块的结束时间。 例如,他们可以说从上午 8 点开始,在上午 11 点结束,或者从上午 8 点开始,持续时间为 180 分钟。 我有一个用于持续时间的文本框,以及一个用于结束时间的日期时间选择器。 DateTimePicker的自定义格式是"hh:mm tt"。 文本框工作正常。在文本框的 Leave 事件中,我使用正确的结束时间更新日期时间选取器。

但是,让DateTimePicker工作并不容易。 当 Leave 事件触发时,日期时间选取器的值并不总是正确。

此外,我要求确保时间段的持续时间至少为 15 分钟,因此理想情况下,当用户"离开"任一控件时,我可以更新另一个控件,并验证它至少为 15 分钟。 (如果<15,我将其设置为 15)。

好的,是时候编写一些代码了:

private void SetDuration(int Duration)
{
    Duration = Math.Max(15, Duration);
    m_TextBoxDuration.Text = Duration.ToString();
    m_DateTimePickerEndTime.Value = m_DateTimePickerStartTime.Value.AddMinutes(Duration);
}
private void m_TextBoxDuration_Leave(object sender, EventArgs e)
{
    int duration = 0;
    int.TryParse(m_TextBoxDuration.Text, out duration);
    SetDuration(duration);
}
private void m_DateTimePickerEndTime_Leave(object sender, EventArgs e)
{
    SetDuration((int)(m_DateTimePickerEndTime.Value.Subtract(m_DateTimePickerStartTime.Value).TotalMinutes));
}

这是区别。 假设日期时间选取器的时间设置为 07:00 PM。如果用户突出显示"07"并键入 6,然后点击 Tab,则 Leave 事件将在 ValueChanged 事件之前触发。 如果用户键入 06,然后键入 Tab,则事件将按相反的顺序进行。 因此,我不能指望任何一个事件都是最终事件。 我不想(不能)每次收到 ValueChanged 事件时都更新,因为这样最短持续时间要求可能会真正扰乱尝试进行编辑的用户。

帮助?

日期时间选取器离开/值更改事件

在离开之前,您需要先验证控件。如果从m_DateTimePickerEndTime跳到文本框,则可以使用此选项。Focus() 来验证所有控件。

private void m_DateTimePickerEndTime_Leave(object sender, EventArgs e)
{    
  this.Focus();      
  SetDuration((int(m_DateTimePickerEndTime.Value.Subtract
          (m_DateTimePickerStartTime.Value).TotalMinutes));    
}

如果您的 Tab 键顺序不同,请输入 this。专注于另一个休假事件。