Вопрос

Я хочу иметь возможность изменить свойство значения трекбара в коде, не запуская мой обработчик событий. Я хочу запустить событие только тогда, когда пользователь изменяет управление, перетаскивая слайдер или перемещая его с помощью клавиатуры. Какой самый простой способ достичь этого?

У меня есть 6 треков, и я хочу изменить значение 3 из них в зависимости от того, какой трексер изменился. Проблема заключается в том, что изменение стоимости этих трекбартов проведет свои валюченные события.

Это было полезно?

Решение

Один из способов сделать это, это временно удалить обработчики событий, прежде чем изменить значения в коде, а затем присоединитесь к ним потом, хотя это не кажется слишком элегантным.

В качестве альтернативы вы можете создать свой собственный класс Custom TrackBar, который наследует от TrackBar и переопределить метод OnValueChanged (), чтобы делать то, что вы хотите.

Если вы это сделали, идея, о которой я могу придумать, это установить свойство SuspendchenceEvents, прежде чем изменить значение и сбросить его после этого, это обеспечит аналогичную функциональность метода обработчика «Удалить / присоединить», но логика инкапсуется в самом трекбере. Отказ

public class MyTrackBar : TrackBar
{
    public bool SuspendChangedEvent
    { get; set; }

    protected override void OnValueChanged(EventArgs e)
    {
        if (!SuspendChangedEvent) base.OnValueChanged(e);
    }
}

Затем в вашем коде вы можете сделать что -то подобное.

// Suspend trackbar change events
myTrackBar1.SuspendChangedEvents = true;

// Change the value
myTrackBar1.Value = 50;  // ValueChanged event will not fire.

// Turn changed events back on
myTrackBar1.SuspendChangedEvents = false;

Другие советы

Вы можете использовать событие прокрутки вместо ValueChanged, это событие Только Получает увольнение, когда пользователь перетаскивает слайдер или использует клавиши, чтобы переместить его значение, и изменения, которые вы вносите из кода, не запускают его.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top