2013-01-09 46 views
0

在我的C#Windows窗體中有一個文本框和一個datatimePicker.This文本框有Leave事件和 當文本框離開事件發生時,我想填充datetimepicker中的值。這個datetimepicker也有ValueChanged事件。 現在我的問題是,當從文本框中填寫datetimepicker的值離開事件,同一時間datetimepicker ValueChanged事件也發生。 因此,文本框離開事件再次發生。 在這個問題中,我不希望發生從文本框離開事件的datetimepicker Valuechanged事件。 這是我的代碼示例。
如何防止DateTimePicker Valuechanged事件從文本框離開事件

private void textbox_Leave(object sender, EventArgs e) 
{ 
     datetimepicker.Value = System.DateTime.Now.ToString("dd/MM/yyyy").Substring(0, 10); 
} 

private void datetimepicker_ValueChanged(object sender, EventArgs e) 
{ 
     //do something 
} 

感謝您的幫助。對不起我的英語不好。

+0

你爲什麼不刪除該事件中的一個或創建保存實際值的屬性,並做Leave事件所有代碼..?你可以顯示你有什麼代碼..?並解釋你真正想要捕獲數據的方式。你還應該在每個事件中放置一個斷點,以便你能夠首先看到哪一個觸發。然後從那裏決定如何在邏輯上編碼剩下的你的功能..這是否有意義..? – MethodMan

+0

這是我的代碼示例。 private void textbox_Leave(object sender,EventArgs e) \t datetimepicker.Value = System.DateTime.Now.ToString(「dd/MM/yyyy」)。Substring(0,10); } 私人無效datetimepicker_ValueChanged(對象發件人,EventArgs的){ \t //做點什麼 }在這段代碼中,當離開文本框事件發生時,的DateTimePicker ValueChanged事件會發生ASLO。 – amm

+0

amm不要發表評論中的代碼發佈它與您的原始問題一起..編輯您的問題,並添加它 – MethodMan

回答

0

您可以使用

  • 或布爾變量,這表明該值以DateTimePicker設置,如果出現了ValueChangedEvent,也就無所謂了。

    //PSEUDO CODE 
    bool setDateFromOutside = false; //GLOBAL VARIABLE 
    
    public void TextBox_Leave(...){ 
    
    setDateFromOutside = true; //SET TRUE 
    
    dateTimePicker.Value = newDate; //SOME VALUE 
    
    setDateFromOutside = false; //SET TRUE 
    
    } 
    
    public void DateTimePicker_ValueChanged(...){ 
    
        if(setDateFromOutside) 
         return; 
    } 
    
  • 或從ValueChangedEvent值設置爲DateTimePicker退訂之前和之後重新訂閱。

+0

請爲我的第二個答案解釋詳細信息。 – amm

+0

@amm:che編輯答案,希望這有助於... – Tigran

0

現在我解決我的問題了。

private void textbox_Leave(object sender, EventArgs e) 
{ 
     datetimepicker.ValueChanged -= datetimepicker_ValueChanged; 
     datetimepicker.Value = System.DateTime.Now.ToString("dd/MM/yyyy").Substring(0, 10); 
     datetimepicker.ValueChanged += datetimepicker_ValueChanged; 
} 

private void datetimepicker_ValueChanged(object sender, EventArgs e) 
{ 
     //do something 
}