Range
Общее числовое состояние ползунков, полос прокрутки и индикаторов.
Range хранит значение и правила его изменения. Для готового элемента интерфейса используйте подходящий производный класс, например HSlider или ProgressBar. Начальные настройки базового Range: MinValue = 0, MaxValue = 100, Value = 0, Step = 1, Page = 0; AllowGreater, AllowLesser, Rounded и ExpEdit выключены. Передавайте конечные числа: NaN не отклоняется как недопустимое значение.
При присваивании Value положительный Step округляет значение к сетке относительно MinValue, затем Rounded округляет до целого, затем применяются границы. Например, MinValue = 0.1 и Step = 0.2 дают сетку 0.1, 0.3, 0.5. Step = 0 отключает сетку, но не Rounded и не границы. Изменение Step, Rounded или AllowGreater/AllowLesser само по себе не пересчитывает текущее Value: для применения новых правил присвойте Value повторно.
Обычный верхний предел равен MaxValue − Page, нижний — MinValue. Page ограничен диапазоном от 0 до MaxValue − MinValue. Он обозначает размер страницы, а не шаг изменения. Если AllowGreater/AllowLesser включены, соответствующее ограничение Value снимается. Увеличение MinValue при необходимости поднимает MaxValue; MaxValue ниже MinValue не сохраняется.
Ratio — нормализованное положение между MinValue и MaxValue, а не между MinValue и MaxValue − Page. При границах 0/100 и Page = 20 наибольшее обычное Value равно 80, Ratio равно 0.8. Присваивание Ratio = 1 также остановится на Value = 80. Getter Ratio ограничен 0…1 даже при разрешённом выходе Value за границы; при равных границах возвращает 1. Для предсказуемой экспоненциальной шкалы ExpEdit используйте 0 < MinValue < MaxValue; при отрицательном минимуме применяется линейная шкала.
ValueChanged вызывается при изменении итогового значения через обычный setter у владельцев внутри дерева. Повторное присваивание с тем же результатом сигнал не вызывает. Changed сообщает об изменении MinValue, MaxValue, Step или Page; это не универсальный сигнал всех настроек. SetValueNoSignal обновляет значение и вызывает виртуальный _ValueChanged у владельцев внутри дерева, но не испускает ValueChanged. Не используйте этот метод как способ подавить всю логику подкласса.
Вызов a.Share(b) заменяет числовое состояние b общим состоянием a. Значение, границы, шаг, страница, экспоненциальный режим и разрешение выхода за пределы становятся общими; Rounded остаётся отдельным. Запись через один элемент видна другому, а округление выбирает элемент, через который выполнена запись. Share сразу уведомляет целевой b сигналами Changed и ValueChanged, даже если число совпало или b ещё вне дерева. Unshare сохраняет копию текущего состояния и отделяет элемент от группы.
Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Конструкторы1
RangeКонструктор
public Range();Создаёт базовое числовое состояние: диапазон 0…100, Value = 0, Step = 1, Page = 0. Для визуального ползунка или индикатора используйте производный Control.
Свойства10
AllowGreaterСвойство
public bool AllowGreater { get; set; }Разрешает Value выше MaxValue − Page, false по умолчанию. Переключение не пересчитывает уже сохранённое значение и не испускает Changed. Getter Ratio всё равно ограничен 0…1. Общее состояние после Share.
AllowLesserСвойство
public bool AllowLesser { get; set; }Разрешает Value ниже MinValue, false по умолчанию. Переключение не пересчитывает уже сохранённое значение и не испускает Changed. Не отключает Step/Rounded. Общее состояние после Share.
ExpEditСвойство
public bool ExpEdit { get; set; }Включает экспоненциальное преобразование Ratio, false по умолчанию. Не логарифмирует само сохранённое Value. Для предсказуемой шкалы используйте положительный минимум и больший максимум; отрицательный минимум даёт линейное преобразование. Изменение не испускает Changed/ValueChanged, но может вызвать _ValueChanged при обновлении владельцев.
MaxValueСвойство
public double MaxValue { get; set; }Верхняя граница диапазона, 100 по умолчанию. Значение ниже MinValue заменяется MinValue. После изменения Page и Value пересчитываются; обычный предел Value равен MaxValue − Page.
MinValueСвойство
public double MinValue { get; set; }Нижняя граница, 0 по умолчанию. Изменение при необходимости поднимает MaxValue, ограничивает Page, повторно применяет правила к Value и вызывает Changed. Общее состояние после Share.
PageСвойство
public double Page { get; set; }Размер страницы, 0 по умолчанию; автоматически ограничен 0…MaxValue − MinValue. Уменьшает обычный верхний предел Value до MaxValue − Page. Изменение повторно применяет Value и вызывает Changed. Это не шаг прокрутки.
RatioСвойство
public double Ratio { get; set; }Нормализованное положение 0…1 по полному диапазону MinValue…MaxValue с учётом ExpEdit. Setter вычисляет число и вызывает обычный SetValue; Page/Step/Rounded могут помешать точному обратному соответствию. Getter при равных границах возвращает 1.
RoundedСвойство
public bool Rounded { get; set; }Локальная настройка округления до целого после Step, false по умолчанию. Не входит в общее состояние Share и не пересчитывает сохранённое Value при переключении. Последующее ограничение границ может дать дробное значение даже при Rounded = true.
StepСвойство
public double Step { get; set; }Сетка округления Value относительно MinValue, 1 по умолчанию. Положительный шаг применяется при следующей записи Value; неположительный отключает эту сетку. Изменение вызывает Changed, но не пересчитывает текущее Value. Для дробного ввода обычно задайте Step = 0 и Rounded = false.
ValueСвойство
public double Value { get; set; }Текущее число. Setter применяет Step, затем Rounded, затем ограничения MinValue/MaxValue − Page с учётом AllowLesser/AllowGreater. При изменении результата вызывает ValueChanged у владельцев внутри дерева. Значение общее после Share.
Методы24
GetAsRatiodouble
public double GetAsRatio();Нормализованное положение 0…1 по полному диапазону MinValue…MaxValue с учётом ExpEdit. Setter вычисляет число и вызывает обычный SetValue; Page/Step/Rounded могут помешать точному обратному соответствию. Getter при равных границах возвращает 1.
doubleНормализованное положение по полному диапазону, 0…1 для корректных конечных настроек; 1 при равных границах.
GetMaxdouble
public double GetMax();Верхняя граница диапазона, 100 по умолчанию. Значение ниже MinValue заменяется MinValue. После изменения Page и Value пересчитываются; обычный предел Value равен MaxValue − Page.
doubleТекущее сохранённое значение настройки.
GetMindouble
public double GetMin();Нижняя граница, 0 по умолчанию. Изменение при необходимости поднимает MaxValue, ограничивает Page, повторно применяет правила к Value и вызывает Changed. Общее состояние после Share.
doubleТекущее сохранённое значение настройки.
GetPagedouble
public double GetPage();Размер страницы, 0 по умолчанию; автоматически ограничен 0…MaxValue − MinValue. Уменьшает обычный верхний предел Value до MaxValue − Page. Изменение повторно применяет Value и вызывает Changed. Это не шаг прокрутки.
doubleСохранённый размер страницы, не шаг изменения значения.
GetStepdouble
public double GetStep();Сетка округления Value относительно MinValue, 1 по умолчанию. Положительный шаг применяется при следующей записи Value; неположительный отключает эту сетку. Изменение вызывает Changed, но не пересчитывает текущее Value. Для дробного ввода обычно задайте Step = 0 и Rounded = false.
doubleТекущее сохранённое значение настройки.
GetValuedouble
public double GetValue();Текущее число. Setter применяет Step, затем Rounded, затем ограничения MinValue/MaxValue − Page с учётом AllowLesser/AllowGreater. При изменении результата вызывает ValueChanged у владельцев внутри дерева. Значение общее после Share.
doubleСохранённое общее значение, которое может выходить за границы при AllowGreater/AllowLesser.
IsGreaterAllowedbool
public bool IsGreaterAllowed();Разрешает Value выше MaxValue − Page, false по умолчанию. Переключение не пересчитывает уже сохранённое значение и не испускает Changed. Getter Ratio всё равно ограничен 0…1. Общее состояние после Share.
boolТекущее сохранённое значение настройки.
IsLesserAllowedbool
public bool IsLesserAllowed();Разрешает Value ниже MinValue, false по умолчанию. Переключение не пересчитывает уже сохранённое значение и не испускает Changed. Не отключает Step/Rounded. Общее состояние после Share.
boolТекущее сохранённое значение настройки.
IsRatioExpbool
public bool IsRatioExp();Включает экспоненциальное преобразование Ratio, false по умолчанию. Не логарифмирует само сохранённое Value. Для предсказуемой шкалы используйте положительный минимум и больший максимум; отрицательный минимум даёт линейное преобразование. Изменение не испускает Changed/ValueChanged, но может вызвать _ValueChanged при обновлении владельцев.
boolТекущее сохранённое значение настройки.
IsUsingRoundedValuesbool
public bool IsUsingRoundedValues();Локальная настройка округления до целого после Step, false по умолчанию. Не входит в общее состояние Share и не пересчитывает сохранённое Value при переключении. Последующее ограничение границ может дать дробное значение даже при Rounded = true.
boolТекущее сохранённое значение настройки.
SetAllowGreatervoid
public void SetAllowGreater(bool allow);Разрешает Value выше MaxValue − Page, false по умолчанию. Переключение не пересчитывает уже сохранённое значение и не испускает Changed. Getter Ratio всё равно ограничен 0…1. Общее состояние после Share.
| Имя | Тип | По умолчанию |
|---|---|---|
allow | bool | — |
allowtrue разрешает превышать MaxValue − Page при последующих записях Value.
SetAllowLesservoid
public void SetAllowLesser(bool allow);Разрешает Value ниже MinValue, false по умолчанию. Переключение не пересчитывает уже сохранённое значение и не испускает Changed. Не отключает Step/Rounded. Общее состояние после Share.
| Имя | Тип | По умолчанию |
|---|---|---|
allow | bool | — |
allowtrue разрешает опускаться ниже MinValue при последующих записях Value.
SetAsRatiovoid
public void SetAsRatio(double value);Нормализованное положение 0…1 по полному диапазону MinValue…MaxValue с учётом ExpEdit. Setter вычисляет число и вызывает обычный SetValue; Page/Step/Rounded могут помешать точному обратному соответствию. Getter при равных границах возвращает 1.
| Имя | Тип | По умолчанию |
|---|---|---|
value | double | — |
valueНормализованное положение, обычно 0…1. Итоговое Value дополнительно проходит Step/Rounded/Page.
SetExpRatiovoid
public void SetExpRatio(bool enabled);Включает экспоненциальное преобразование Ratio, false по умолчанию. Не логарифмирует само сохранённое Value. Для предсказуемой шкалы используйте положительный минимум и больший максимум; отрицательный минимум даёт линейное преобразование. Изменение не испускает Changed/ValueChanged, но может вызвать _ValueChanged при обновлении владельцев.
| Имя | Тип | По умолчанию |
|---|---|---|
enabled | bool | — |
enabledtrue включает экспоненциальное преобразование Ratio; используйте 0 < MinValue < MaxValue.
SetMaxvoid
public void SetMax(double maximum);Верхняя граница диапазона, 100 по умолчанию. Значение ниже MinValue заменяется MinValue. После изменения Page и Value пересчитываются; обычный предел Value равен MaxValue − Page.
| Имя | Тип | По умолчанию |
|---|---|---|
maximum | double | — |
maximumКонечная верхняя граница; не сохраняется ниже MinValue.
SetMinvoid
public void SetMin(double minimum);Нижняя граница, 0 по умолчанию. Изменение при необходимости поднимает MaxValue, ограничивает Page, повторно применяет правила к Value и вызывает Changed. Общее состояние после Share.
| Имя | Тип | По умолчанию |
|---|---|---|
minimum | double | — |
minimumКонечная нижняя граница; может поднять MaxValue.
SetPagevoid
public void SetPage(double pagesize);Размер страницы, 0 по умолчанию; автоматически ограничен 0…MaxValue − MinValue. Уменьшает обычный верхний предел Value до MaxValue − Page. Изменение повторно применяет Value и вызывает Changed. Это не шаг прокрутки.
| Имя | Тип | По умолчанию |
|---|---|---|
pagesize | double | — |
pagesizeКонечный размер страницы; ограничивается 0…MaxValue − MinValue.
SetStepvoid
public void SetStep(double step);Сетка округления Value относительно MinValue, 1 по умолчанию. Положительный шаг применяется при следующей записи Value; неположительный отключает эту сетку. Изменение вызывает Changed, но не пересчитывает текущее Value. Для дробного ввода обычно задайте Step = 0 и Rounded = false.
| Имя | Тип | По умолчанию |
|---|---|---|
step | double | — |
stepКонечный шаг; положительный включает сетку, 0 отключает её. Текущее значение не пересчитывается.
SetUseRoundedValuesvoid
public void SetUseRoundedValues(bool enabled);Локальная настройка округления до целого после Step, false по умолчанию. Не входит в общее состояние Share и не пересчитывает сохранённое Value при переключении. Последующее ограничение границ может дать дробное значение даже при Rounded = true.
| Имя | Тип | По умолчанию |
|---|---|---|
enabled | bool | — |
enabledtrue включает локальное округление до целого при последующих записях Value.
SetValuevoid
public void SetValue(double value);Текущее число. Setter применяет Step, затем Rounded, затем ограничения MinValue/MaxValue − Page с учётом AllowLesser/AllowGreater. При изменении результата вызывает ValueChanged у владельцев внутри дерева. Значение общее после Share.
| Имя | Тип | По умолчанию |
|---|---|---|
value | double | — |
valueКонечное число до применения шага, округления и границ.
SetValueNoSignalvoid
public void SetValueNoSignal(double value);Применяет те же числовые правила, что SetValue, без ValueChanged. При изменении обновляет общих владельцев внутри дерева: вызывает виртуальный _ValueChanged и ставит перерисовку в очередь. Поэтому подкласс всё ещё может выполнять собственную логику.
| Имя | Тип | По умолчанию |
|---|---|---|
value | double | — |
valueКонечное число; ValueChanged подавляется, виртуальные callback остаются.
Sharevoid
public void Share(Entity with);Делает целевой Range владельцем общего числового состояния этого Range, заменяя его прежние настройки. Параметр имеет тип Entity, но фактически должен быть Range. Rounded не разделяется. Цель немедленно получает Changed и ValueChanged; сохраняйте осторожность с обработчиками, вызывающими Share повторно.
| Имя | Тип | По умолчанию |
|---|---|---|
with | Entity | — |
withЦелевой существующий Range, который получит общее состояние этого элемента. Не произвольная Entity.
Unsharevoid
public void Unshare();Отделяет этот элемент от общего числового состояния, сохраняя текущие значения и настройки. Другие владельцы остаются в прежней группе. Сам вызов не испускает Changed/ValueChanged.
_ValueChangedvoid
public virtual void _ValueChanged(double newValue);Виртуальный callback для реакции подкласса на уведомление о значении. Вызывается до сигнала при обычном изменении, также при SetValueNoSignal, обновлении ExpEdit и Share. Не считайте вызов доказательством нового числа или испущенного ValueChanged; вне дерева обычные уведомления пропускаются.
| Имя | Тип | По умолчанию |
|---|---|---|
newValue | double | — |
newValueТекущее общее значение; callback может вызываться без изменения самого числа.
Сигналы и события2
ChangedСобытие
public event Action Changed;Изменены MinValue, MaxValue, Step или Page. Обычная запись Value сигнал не вызывает; Share непосредственно вызывает его у целевого элемента. ExpEdit, Rounded и AllowGreater/AllowLesser не обязаны его испускать.
ValueChangedСобытие
public event Range.ValueChangedEventHandler ValueChanged;Сигнал изменившегося итогового значения через обычный setter для владельцев внутри дерева. SetValueNoSignal его подавляет; присваивание с тем же итогом его не вызывает. Share непосредственно уведомляет целевой элемент даже вне дерева и без изменения числа.
| Имя | Тип | По умолчанию |
|---|---|---|
value | double | — |
valueИтоговое общее значение после применения правил Range, double.