protected void UIApplyRangedObject(IRanged ranged) { this.trackBarStart.Enabled = (ranged != null); this.trackBarEnd.Enabled = (ranged != null); if (ranged != null) { this.trackBarStart.Maximum = ranged.MaxRange; this.trackBarEnd.Maximum = ranged.MaxRange; this.trackBarStart.Value = ranged.StartIndex; this.trackBarEnd.Value = ranged.StartIndex + ranged.Count; } }
/// <summary> /// Функция выполняет коррекцию конечного значения интервала для заданного объекта. /// Коррекция выполняется согласно принятым для интервальных контролов правилам, а именно, /// что конечное значение не должно меньше начального значение или минимума и больше максимума /// </summary> /// <typeparam name="T">Тип значения</typeparam> /// <typeparam name="TInterval">Тип интервала</typeparam> /// <param name="ranged">Корректируемый объект</param> /// <param name="value">Проверяемое значение</param> /// <returns><paramref name="value"/>, либо скорректированное значение</returns> public static object CoerceRangeEndValue <T, TInterval>(IRanged <T, TInterval> ranged, T value) { if (ranged == null) { return(value); } double?coercedValue = null; double doubleValue = ranged.ValueToDouble(value); // порядок проверок важен: сначала проверяем размер интервала, // т.к. его "подгонка" под минимальное значение может "испортить" более важные ограничения. double startValue = ranged.ValueToDouble(ranged.StartValue); double minRangeValue = ranged.IntervalToDouble(ranged.MinRangeValue); double newRangeValue = doubleValue - startValue; bool isSingleValue = ranged.IsSingleValue; if (!isSingleValue && DoubleUtil.LessThan(newRangeValue, minRangeValue)) { coercedValue = doubleValue = minRangeValue + startValue; } double maximum = ranged.ValueToDouble(ranged.Maximum); if (doubleValue > maximum) { coercedValue = doubleValue = maximum; } if (!isSingleValue && doubleValue < startValue) { coercedValue = startValue; } if (coercedValue.HasValue) { return(ranged.DoubleToValue(coercedValue.Value)); } return(value); }