仅在跟踪栏的最终值上触发事件

时间:2018-10-06 17:12:17

标签: c# winforms devexpress trackbar

我有一个来自TrackBar的自定义Devexpress控件

Here

我需要根据TrackBar的选定值对图像执行一些长时间运行的Background操作。但是在选择/拖动过程中,事件不应以20的间隔触发20次,而应仅在最终位置触发。

目前,我采用以下方法

private void trackBar1_MouseUp(object sender, EventArgs e)
{
    value+= trackBar1.Value;
    if ((value> 0) && (newvalue != oldvalue))
    {
        longworker.RunWorkerAsync();
        oldvalue = newvalue;
    }
}

private void trackBar1_EditValueChanged(object sender, EventArgs e)
{
    newvalue = trackBar1.Value;
}

这很好用,但是用户需要将鼠标移出控件才能触发事件。
有办法解决这个问题吗?
答案:DevExpress.XtraEditorsTrackBarControl提供了一种方法,但是自定义控件没有滚动事件。

1 个答案:

答案 0 :(得分:0)

您可以检查当前鼠标位置是否在轨迹栏边界之外,以执行必要的代码:

private void trackBar1_MouseUp(object sender, EventArgs e) {
   value += trackBar1.Value;
   if(value > 0 && newvalue != oldvalue) {
    longworker.RunWorkerAsync();
    oldvalue = newvalue;
   }
   else if(!trackBar.ClientRectangle.Contains(e.Location)) {
            //your code here
   }
}