2016-05-31 36 views
3

我有2個日期選擇器。一個發票和一個到期日。 我可以在明天選擇發票日期。但是,當我繼續填寫控件時,它可能會在今天保留截止日期。 這給出了duedate事件沒有被解僱的場景,因爲我沒有輸入它。 現在,我不希望用戶的到期日小於實際發票日期,但由於「截止日期」事件未被解僱,因此我無法真正驗證此情況。在datepicker上提高驗證事件c#Winforms

任何人都可以告訴我如何通過代碼觸發驗證事件嗎?

這是我對那一刻的情景:

private void dpInvoiceDate_Validating(object sender, CancelEventArgs e) 
    { 
     // Convert the dp invoice date + hour to only date 
     var dateAndTime = Convert.ToDateTime(dpInvoiceDate.Text); 
     var date = dateAndTime.Date; 



     if (!InputChecks.IsGeldigeDatum(DateTime.Now.Date, Convert.ToDateTime(date))) 
     { 
      errorProvider1.SetError(dpInvoiceDate, "Invoice date can not be in the past"); 
      e.Cancel = true; 
     } 
     else 
     { 
      errorProvider1.SetError(dpInvoiceDate, ""); 
     } 


    } 

    private void dpDueDate_Validating(object sender, CancelEventArgs e) 
    { 
     // Convert the dp invoice date + hour to only date 
     var dateAndTime = Convert.ToDateTime(dpDueDate.Text); 
     var date = dateAndTime.Date; 
     var dateAndTimeInvioceDate = Convert.ToDateTime(dpInvoiceDate.Text); 
     var dateInvoiceDate = dateAndTimeInvioceDate.Date; 



     if (date < dateInvoiceDate) 
     { 
      errorProvider1.SetError(dpDueDate, "Due date can not be in the past"); 
      e.Cancel = true; 
     } 
     else 
     { 
      errorProvider1.SetError(dpDueDate, ""); 
     } 
    } 
+0

我建議使用Dispatcher.Invoke法點在哪裏,你要調用交貨期事件https://msdn.microsoft.com/en-us/library/system.windows.threading.dispatcher.invoke %28v = vs.110%29.aspx?f = 255&MSPPError = -2147217396 – Needham

+0

您是否使用Winforms驗證機制? – progpow

+0

@progpow:你的確切意思是驗證機制?在我的保存按鈕即時調用'(this.ValidateChildren())'但即使點擊按鈕不會返回我的錯誤。或者至少它沒有顯示我的錯誤提供者。 – Kevin

回答

0

我recomends調用方法Update()在驗證發票日期。

dpDueDate.Update(); 
+0

@凱文,你試試這個方法嗎?你的情況錯了嗎? – progpow