如何在不触发slider1_ValueChanged的情况下设置C#滑块的值

时间:2011-04-24 07:27:34

标签: c# .net

在slider1_ValueChanged上我想做一些事情,然后设置一个新值到滑块但不再触发slider1_ValueChanged,否则我可能有无限循环。

我认为设置属性不会触发事件,但我只是使用Visual Studio Slider测试它确实触发了它的事件。使用标志是非常丑陋和复杂我想避免使用其他事件吗?

2 个答案:

答案 0 :(得分:4)

这是Windows窗体中的常见问题。您需要取消挂钩事件处理程序,进行更改,然后再次连接事件处理程序。

如果将事件处理程序挂钩/取消挂钩代码移动到它们自己的函数中,可以使这更容易,这样就可以从构造函数(或Loaded事件)和ValueChanged事件中进行连接。

答案 1 :(得分:2)

我不确定这个,但一般来说,当您在代码中设置属性时,会触发事件。

但如果确实如此,一般的技巧就是用一个排除字段来保护:

private bool _settingValue = false;

void valueChanged(object sender, ...)
{
   if (! settingValue)
   {
        _settingValue = true;
        try 
        { ... 
        }
        finally { settingvalue = false; }
   }
}