3Q 4 ur time and answer...=========================================环境:
Form1中有一DateTimePicker控件dtpBegin,初始化值为20050101;目的:
在dtpBegin的值变化时,判断其值是否超过了DateTime.Now。
如果超过,则弹出MessageBox提示,并且将dtpBegin的值重置为初始值。代码一:
private void dtpBegin_ValueChanged(object sender, System.EventArgs e)
{
     if(this.dtpBegin.Value>DateTime.Now)
     {
        MessageBox.Show("请确定开始时间在有效范围内!");
        this.dtpBegin.Value=new DateTime(2005,1,1);
      }
}现象:
运行时单击dtpBegin向下一月翻页的按钮(请注意我说的向后一个月的更改值得方式,可能是问题的关键),当翻页至05年4月的时候显示提示框弹出。单击确定后,就在这里发生了异常现象单击确定dtpBegin的值被重置后,程序处理并没有结束,而是连续弹出了九个提示框,同时,日历菜单自动向下月翻页,dtpBegin的value值不断按月递增。断点调试发现,每一个按月递增的过程都包含了两个阶段,首先被重置为20050101,然后(困惑的就是这里,不知道这个值是从哪里冒出来的)是一次异常的按月递增。奇怪的是,这种异常现象只在采用向下月翻页按钮改变值时发生。
=============================

解决方案 »

  1.   

    我认为是因为在引发了循环调用引起的.
    在...ValueChanged事件中不应该再修改这个控件的Value属性,否则会再次引发该事件,导致事件调用栈溢出而产生错误.
      

  2.   

    你把这些代码写在Validated事件里就行了
    if(this.dtpBegin.Value>DateTime.Now)
         {
            MessageBox.Show("请确定开始时间在有效范围内!");
            this.dtpBegin.Value=new DateTime(2005,1,1);
            dtpBegin.Fouce();
          }