Как использовать поплавки с TrackBar - PullRequest
8 голосов
/ 22 января 2010

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

Ответы [ 2 ]

18 голосов
/ 22 января 2010

Вы можете использовать множитель. Скажем, например, что вы хотели, чтобы ваш элемент управления TrackBar переключался с 0 на 5 с шагом 0,01. Просто установите Минимум на 0, Максимум на 500 и увеличьте на 1.

Когда вы установите значение с плавающей запятой, умножьте его на 100 и используйте его для значения TrackBar.

Таким образом вы сможете получить любую (реалистичную) степень точности, поскольку TrackBar работает с целочисленными значениями и имеет полный диапазон данных Int32. Это намного более точно, чем требует пользовательский интерфейс.

4 голосов
/ 09 января 2014

Другая идея состоит в том, чтобы наследовать от TrackBar и моделировать значения с плавающей точкой в ​​пользовательском классе так, как Рид Копси предложил использовать целые числа и умножить с коэффициентом точности.

Для небольших значений с плавающей запятой достаточно хорошо работает следующее:

class FloatTrackBar: TrackBar
{
    private float precision = 0.01f;

    public float Precision
    {
        get { return precision; }
        set
        {
            precision = value;
            // todo: update the 5 properties below
        }
    }
    public new float LargeChange
    { get { return base.LargeChange * precision; } set { base.LargeChange = (int) (value / precision); } }
    public new float Maximum
    { get { return base.Maximum * precision; } set { base.Maximum = (int) (value / precision); } }
    public new float Minimum
    { get { return base.Minimum * precision; } set { base.Minimum = (int) (value / precision); } }
    public new float SmallChange
    { get { return base.SmallChange * precision; } set { base.SmallChange = (int) (value / precision); } }
    public new float Value
    { get { return base.Value * precision; } set { base.Value = (int) (value / precision); } }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...