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

本文关键字:事件 文本 离开 DateTimePicker Valuechanged 何防止 | 更新日期: 2023-09-27 17:51:08

在我的c# Windows窗体有一个文本框和一个datatimePicker。这个文本框有离开事件和当文本框离开事件发生时,我想在datetimepicker中填充值。这个日期时间选择器也有ValueChanged Event。现在我的问题是,当从文本框离开事件的datetimepicker中填充值时,同一时间datetimepicker valuechange事件也发生了。文本框离开事件再次发生。在这个问题中,我不想发生日期时间选择器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 
} 

谢谢你的帮助。对不起,我的英语不好。

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

您可以使用

  • 或布尔变量,表示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的订阅,之后重新订阅

现在我解决了我的问题。

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 
}