0

在我的 C# Windows 表单中有一个文本框和一个 datatimePicker。这个文本框有离开事件,当文本框离开事件发生时,我想在 datetimepicker 中填充值。这个 datetimepicker 也有 ValueChanged 事件。现在我的问题是当从文本框离开事件中填充 datetimepicker 的值时,同时 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 
} 

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

4

2 回答 2

0

您可以使用

  • 或一个布尔变量,表示 to 的值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,然后再次订阅。

于 2013-01-09T07:37:10.667 回答
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 
} 
于 2013-01-09T08:23:08.080 回答