在slider1_ValueChanged上我想做一些事情,然后设置一个新值到滑块但不再触发slider1_ValueChanged,否则我可能有无限循环。
我认为设置属性不会触发事件,但我只是使用Visual Studio Slider测试它确实触发了它的事件。使用标志是非常丑陋和复杂我想避免使用其他事件吗?
答案 0 :(得分:4)
这是Windows窗体中的常见问题。您需要取消挂钩事件处理程序,进行更改,然后再次连接事件处理程序。
如果将事件处理程序挂钩/取消挂钩代码移动到它们自己的函数中,可以使这更容易,这样就可以从构造函数(或Loaded事件)和ValueChanged事件中进行连接。
答案 1 :(得分:2)
我不确定这个,但一般来说,当您在代码中设置属性时,不会触发事件。
但如果确实如此,一般的技巧就是用一个排除字段来保护:
private bool _settingValue = false;
void valueChanged(object sender, ...)
{
if (! settingValue)
{
_settingValue = true;
try
{ ...
}
finally { settingvalue = false; }
}
}