如何防止DateTimePicker Valuechanged事件从文本框离开事件

时间:2013-01-09 07:32:21

标签: c# winforms

在我的C#Windows窗体中有一个文本框和一个datatimePicker。这个文本框有Leave Event和 当文本框离开事件发生时,我想在datetimepicker中填充值。此datetimepicker还具有ValueChanged事件。 现在我的问题是当来自textbox的datetimepicker中的填充值离开事件时,同时datetimepicker还发生了ValueChanged事件。 因此,文本框离开事件再次发生。 在这个问题中,我不希望从textbox Leave Event发生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 
} 

感谢您的帮助。抱歉我的英文。

2 个答案:

答案 0 :(得分: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;
    }
    
  • 或在将值DateTimePicker 取消订阅ValueChangedEvent设置之前,然后再次订阅。

答案 1 :(得分: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 
}