怎么这个也会递归或循环?
怎么这个也会递归或循环?
可是我怎么想,应该不会有问题哈...
这是界面,我想把人的年龄限制,所以我用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;