Один из способов сделать это - временно удалить обработчики событий перед изменением значений в коде, а затем снова присоединить их, хотя это не выглядит слишком элегантно.
В качестве альтернативы вы можете создать свой собственный класс TrackBar, который наследуется от TrackBar, и переопределить метод OnValueChanged (), чтобы сделать то, что вы хотите.
Если вы сделали это, я могу подумать о том, чтобы установить свойство SuspendChangedEvents перед изменением значения и затем сбросить его. Это обеспечит аналогичную функциональность для метода обработчика «удалить / присоединить», но логика инкапсулирована сам трекбар.
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;