在我的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
}
感谢您的帮助。抱歉我的英文。
答案 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
}