日期:2014-05-17  浏览次数:20691 次

怎么这个也会递归或循环?
怎么这个也会递归或循环?
可是我怎么想,应该不会有问题哈...


这是界面,我想把人的年龄限制,所以我用NumericUpAndDown去做.
但是我又想方便滚动,也就是说,可以双向滚动.
我把年龄限制为 [1,150]之间.于是这样:
private void numUpDownAge_ValueChanged(object sender, EventArgs e) {
            numUpDownAge.Value = (numUpDownAge.Value + 150) % 150 + 1;
        }
//但是每次运行的时候,都是 StackOverflow...内存溢出

------解决方案--------------------
内存溢出一般是出现死循环了,你可以debug测试下是否numUpDownAge_ValueChanged这个事件被一直触发了,如果是会一直触发然后再找原因的
------解决方案--------------------
好像这个NumericUpAndDown这个控件用的是小数类型的!
------解决方案--------------------
int v = numUpDownAge.Value;
numUpDownAge.Value = (v + 150) % 150 + 1;

这样呢?
------解决方案--------------------
难道 numUpDownAge.Value = (numUpDownAge.Value + 150) % 150 + 1; 触发了numUpDownAge_ValueChanged事件,那就是递归了,来个断点就清楚了
------解决方案--------------------
这个控件不能手动输入值的,只能再控件的那个上下点击增加减少,如果你要手动输入,那你重写这个控件吧
------解决方案--------------------
这个不是递归,而是死循环,值被改变的事件中,再次改变了值,又触发事件,导致没完没了。
------解决方案--------------------
值改变了就会再次触发那事件,死循环
看看有没有别的事件
或者自个儿在方法外面定义个状态标记
//赋值后会有事件引发的标记
if(_revising)
{
    _revising = false;   //重置事件处理标记
}
//第一次(用户)触发走你的处理
else
{     
      numUpDownAge.Value = (numUpDownAge.Value + 150) % 150;
     _revising = true;
}

------解决方案--------------------
else
{
      _revising = true;  先置标记
      numUpDownAge.Value = (numUpDownAge.Value + 150) % 150;