Событие огня только при окончательном значении трека - PullRequest
0 голосов
/ 06 октября 2018

У меня есть пользовательский TrackBar элемент управления из Devexpress

DevExpress.XtraEditorsTrackBarControl

Мне нужно запустить несколько длительных фоновых операций над изображением на основевыбранное значение TrackBar.Но во время процесса выбора / перетаскивания событие не должно запускаться 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;
}

Это хорошо работает, но пользователь должен вывести мышь из-под контроля, чтобы событие сработало.
Есть ли способ обойти это?
Этот ответ: https://stackoverflow.com/a/9221091/848968 обеспечивает подход, но пользовательский элемент управления не имеет события прокрутки.

1 Ответ

0 голосов
/ 08 октября 2018

Вы можете проверить, находится ли текущая позиция мыши за пределами границ вашей дорожки, чтобы выполнить необходимый код:

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
   }
}
...