DateTimePicker Leave / ValueChanged事件

时间:2011-05-16 22:51:36

标签: c# .net winforms

我有一个简单的小对话框,可让用户设置“时间块”。用户指示块的指定开始时间,然后可以输入持续时间,或输入块的结束时间。例如,他们可以说从早上8点开始,到上午11点结束,或者从早上8点开始,持续180分钟。我有一个持续时间的文本框和一个结束时间的DateTimePicker。 DateTimePicker的自定义格式为“hh:mm tt”。文本框工作得很好。在文本框的Leave事件中,我使用正确的结束时间更新DateTimePicker。

然而,让DateTimePicker工作并不是那么容易。当Leave事件触发时,DateTimePicker的值始终不正确。

另外,我要求确保时间段的持续时间至少为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事件时,我都不想(不能)更新,因为那时最小持续时间要求可能会让尝试进行编辑的用户感到困惑。

帮助?

1 个答案:

答案 0 :(得分:0)

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

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

如果您的标签顺序不同,请将this.Focus放在另一个离开事件中。

相关问题