跟踪栏仅在最终值上触发事件而不是时间值更改

Ste*_*ale 7 c# visual-studio-2010 trackbar

我正在开发一个非常基本的C#visual studio表单应用程序但是我遇到了一些问题,因为我希望它能够像我希望的那样运行轨道栏,所以希望社区中的某个人可以为此提供解决方案.

我所拥有的是一个非常基本的应用程序,主要部分是一个值为0到100的轨迹栏.用户设置轨道的值来表示"要执行的工作量",此时程序可以达到一些设备并告诉他们做"x"工作量(x是轨迹栏的值).所以我所做的是使用轨迹栏滚动事件来捕捉轨迹栏值何时发生变化以及处理程序内部调用设备并告诉他们要做多少工作.

我的问题是我的事件处理程序是为跟踪栏当前所在的位置和结束位置之间的每个值调用的.因此,如果它从10滑动到30,我的事件处理程序被调用20次,这意味着我伸出我的设备并告诉他们运行我甚至不希望它们运行的​​值.滚动停止发生时是否只有事件才能检查最终值?

Mat*_*ias 5

如果用户单击了轨迹栏,只需检查变量即可.如果是这样,请延迟输出.

bool clicked = false;
trackBar1.Scroll += (s,
                        e) =>
{
    if (clicked)
        return;
    Console.WriteLine(trackBar1.Value);
};
trackBar1.MouseDown += (s,
                        e) =>
{
    clicked = true;
};
trackBar1.MouseUp += (s,
                        e) =>
{
    if (!clicked)
        return;

    clicked = false;
    Console.WriteLine(trackBar1.Value);
};
Run Code Online (Sandbox Code Playgroud)

对于这个问题@roken提到的,你可以设置LargeChangeSmallChange0.

  • 为什么不关闭MouseUp事件?这不仅仅是在MouseUp上启动吗? (3认同)