我有三个 DateTimePicker
,其中之一是开始日期和结束日期之间的间隔。在部分代码中,我更新了 startdate.Value
和 enddate.Value
,它们的 ValueChanged
事件更新了 interval.Value
.
当 interval
中的值不需要手动更改时,一切正常。但是当我需要手动更改它时,它会导致 StackOverflow
异常,因为当设置 final.Value
时,它会导致间隔的 ValueChanged
事件触发器,它会更改 final.Value
,等等。
这是 startdate
和 enddate
的 ValueChanged 处理程序:
private void dates_ValueChanged(object sender, EventArgs e)
{
if (startdate.Value < enddate.Value)
{
TimeSpan diff = enddate.Value - startdate.Value;
DateTime newInterval = new DateTime(startdate.Value.Year, startdate.Value.Month, startdate.Value.Day, diff.Hours, diff.Minutes, diff.Seconds);
if (interval.Value != newInterval)
interval.Value = newInterval;
}
}
这是 interval
的 ValueChanged 处理程序,它会导致 StackOverflow
异常:
private void interval_ValueChanged(object sender, EventArgs e)
{
int seconds = intervaloDP.Value.Hour * 3600 + intervaloDP.Value.Minute * 60 + intervaloDP.Value.Second;
finalDP.Value = finalDP.Value.AddSeconds(seconds);
}
有没有办法更改此代码并使其按照我需要的方式工作?
最佳答案
确保始终存在退出条件:
var dtm = startDP.Value.AddSeconds(seconds);
if (dtm != finalDP.Value)
finalDP.Value = dtm;
这样,如果没有更改,事件就不会触发。
更新:更改了代码,以便将秒添加到 startDP,而不是 finalDP。
关于c# - 更改两个相关 DateTimePickers 的值时如何防止 StackOverflow 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16238860/