如何在不触发滑块的情况下设置C#滑块的值1#U值已更改

如何在不触发滑块的情况下设置C#滑块的值1#U值已更改,c#,.net,C#,.net,在slider1\u ValueChanged上,我想做一些事情,然后将一个新值设置为slider,但不要再次触发slider1\u ValueChanged,否则我可能会有无限循环 我以为设置属性不会触发事件,但我只是用VisualStudio Slider进行了测试,它确实会触发事件。使用标志非常难看和复杂,我想避免使用其他事件?我不确定这一点,但通常在代码中设置属性时,它不会触发事件 但如果是这样,一般技术是使用排除字段进行防护: private bool _settingValue =

在slider1\u ValueChanged上,我想做一些事情,然后将一个新值设置为slider,但不要再次触发slider1\u ValueChanged,否则我可能会有无限循环


我以为设置属性不会触发事件,但我只是用VisualStudio Slider进行了测试,它确实会触发事件。使用标志非常难看和复杂,我想避免使用其他事件?

我不确定这一点,但通常在代码中设置属性时,它不会触发事件

但如果是这样,一般技术是使用排除字段进行防护:

private bool _settingValue = false;

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

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


如果将事件处理程序挂接/取消挂接代码移动到它们自己的函数中,则可以更轻松地执行此操作,以便可以从构造函数(或加载的事件)和ValueChanged事件进行挂接。

这是我的想法,但我刚刚使用Visual Studio Slider进行了测试,它确实会触发其事件。使用一个标志真的很难看和复杂,我想避免可能通过使用其他事件?我很确定你需要一个标志。这是一种非常常见的模式。如果您使用的是您自己的控件,则此模式有效,但我阅读它的方式,OP希望知道如何使用框架中的滑块控件避免此情况。我再次测试,似乎事件触发两次,而不是仅触发一次!