求解:ValueChanged事件死循环问题

Foxer 2004-12-29 10:58:23
在form中有一个DateTimePicker控件,当它的值发生变化时,触发ValueChanged事件,我在ValueChanged事件中编写代码对选择的日期进行规范,然后赋给DateTimePicker控件,但是问题就出在这里,当我给DateTimePicker控件赋值的时候,同时再次触发ValueChanged事件,我用什么办法能够让这个事件在我赋值的时候不触发呢?也就是怎么能够暂停这个事件?
...全文
379 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
SeanChen 2004-12-30
  • 打赏
  • 举报
回复
建议 ClampHammer(达龙) 的那种方法
烤火的鱼 2004-12-30
  • 打赏
  • 举报
回复
很简单啊,在valuechange事件中做如下判断:
DateTime dt=dtp.Value;
然后对dt做必要的处理,直到dt是满足要求的值为止,最后使用下面的语句重新给dtp赋值:
if(dtp.Value!=dt)
dtp.Value=dt;
注意到上面的判断语句了吗?这样就不会死循环了。这种方法在TextBox等控件的TextChange事件中同样有效。
ClampHammer 2004-12-30
  • 打赏
  • 举报
回复
赋值前取消注册ValueChanged事件,赋值后在注册事件
//取消事件
this.yourDateTimePicker.ValueChanged-=new EventHandler(yourDateTimePicker_ValueChanged);
//赋值
this.yourDateTimePicker.Value = this.dateTimePicker1.Value;
//重新注册事件
this.yourDateTimePicker.ValueChanged+=new EventHandler(yourDateTimePicker_ValueChanged);
Foxer 2004-12-30
  • 打赏
  • 举报
回复
就想要ClampHammer(达龙)的这种方法,即让事件暂停工作,处理完成后再重新有效

谢谢
dazhu2 2004-12-30
  • 打赏
  • 举报
回复
没有用过,帮UP
jimh 2004-12-30
  • 打赏
  • 举报
回复
楼上的都可以解决问题,我个人还是喜欢ClampHammer(达龙)的方式。
jkflyfox 2004-12-30
  • 打赏
  • 举报
回复
这种问题我以前在treeview的afterchecked事件里遇见过,那里可以用e.action判断
但是对datetimepicker,我也不知道。
marvelstack 2004-12-30
  • 打赏
  • 举报
回复
加一个变量开关,在事件处理中进行判断。
Foxer 2004-12-29
  • 打赏
  • 举报
回复
源代码:

private void dtpValidDate_ValueChanged(object sender, EventArgs e)
{
DateTime td = GetSerialNoDate(dtpValidDate.Value);
dtpValidDate.Value = td;
}

private DateTime GetSerialNoDate(DateTime oriDateTime)
{
if (oriDateTime.Day < 10)
oriDateTime = new DateTime(oriDateTime.Year, oriDateTime.Month, 10);
else if (oriDateTime.Day < 20)
oriDateTime = new DateTime(oriDateTime.Year, oriDateTime.Month, 20);
else
{
oriDateTime = oriDateTime.AddMonths(1);
oriDateTime = new DateTime(oriDateTime.Year, oriDateTime.Month, 1).AddDays(-1);
}
return oriDateTime;
}

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧