简体   繁体   English

如何防止DateTimePicker值更改事件从文本框离开事件

[英]How to prevent DateTimePicker Valuechanged Event from Textbox Leave Event

In my C# Windows form have one textbox and one datatimePicker.This textbox has Leave Event and when textbox leave event occured,I want to fill value in datetimepicker. 在我的C#Windows窗体中,有一个文本框和一个datatimePicker。此文本框具有“离开事件”,当发生文本框离开事件时,我想在datetimepicker中填充值。 This datetimepicker also has ValueChanged Event. 此datetimepicker还具有ValueChanged事件。 Now my problem is when fill value in datetimepicker from textbox leave event,same time datetimepicker ValueChanged Event also occured. 现在我的问题是从文本框离开事件填充datetimepicker中的值时,也发生了相同时间的datetimepicker ValueChanged事件。 So textbox leave event occur again. 因此,文本框离开事件再次发生。 In this problem, I don't want to occur datetimepicker Valuechanged Event from textbox Leave Event. 在此问题中,我不想从文本框“离开事件”中发生datetimepicker Valuechanged事件。 This is sample for my code. 这是我的代码示例。

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 
} 

Thanks for help. 感谢帮助。 Sorry for my English. 对不起我的英语不好。

You may use 您可以使用

  • or a boolean variable, that indicates that the value to DateTimePicker is set from outside , and if appears its ValueChangedEvent , just don't care. 或一个布尔型变量,它指示DateTimePicker的值是从outside设置的,如果它的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; } 
  • or before setting the value to DateTimePicker unsubscribe from its ValueChangedEvent , and subscribe again after. 或在将值设置为DateTimePicker之前从其ValueChangedEvent 取消订阅 ,然后再进行订阅。

Now I resolve my problem by this. 现在,我以此解决我的问题。

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 
} 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM