2011-05-16 97 views
1

我有一個簡單的小對話框,讓用戶設置一個「時間塊」。用戶指定塊的指定開始時間,然後可以輸入持續時間或輸入塊的結束時間。例如,他們可以說上午8點開始,上午11點結束,或者上午8點開始,持續180分鐘。我有一個文本框的持續時間,和一個DateTimePicker的結束時間。 DateTimePicker的自定義格式是「hh:mm tt」。文本框工作得很好。在文本框的離開事件中,我使用正確的結束時間更新DateTimePicker。DateTimePicker離開/ ValueChanged事件

但是,讓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事件時都(無法)更新,因爲那麼最小持續時間要求可能會讓用戶試圖進行編輯。

幫助?

回答

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放在其他事件中。

相關問題