Как я могу привязать непрозрачность winforms к TrackBar (слайдер) - PullRequest
2 голосов
/ 02 апреля 2010

У меня есть winform с BindingSource, который имеет свойство int с именем Opacity в его DataSource. У меня также есть TrackBar на winform, которую я хочу использовать для управления Opacity winform.

Я связал свойство Value на TrackBar с Opacity, и это прекрасно работает, сдвиг TrackBar изменит переменную с TrackBar.Minimum (0) на TrackBar.Maximum (1 ).

Я также связал свойство Opacity winform с этим значением, так как значения TrackBar изменяются только от минимума до максимума в +/- 1, а не в +/- .1 или около того (как это делает Opacity), он не исчезает должным образом. Вместо этого 0 сделает его непрозрачным, а 1 - полностью видимым.

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

Ответы [ 2 ]

2 голосов
/ 02 апреля 2010

Я думаю, что самый простой способ сделать это - создать UserControl, который наследуется непосредственно от TrackBar, который скрывает свойства Value, SmallChange, Minimum, Maximum и TickFrequency с одноименными double свойствами:

public partial class DoubleTrackBar : TrackBar
{
    public DoubleTrackBar()
    {
        InitializeComponent();
    }

    private int _multiplier = 100;

    [Browsable(true)]
    public new double TickFrequency
    {
        get
        {
            return (double)base.TickFrequency / _multiplier;
        }
        set
        {
            base.TickFrequency = (int)(value * _multiplier);
        }
    }

    [Browsable(true)]
    public new double Minimum
    {
        get
        {
            return (double)base.Minimum / _multiplier;
        }
        set
        {
            base.Minimum = (int)(value * _multiplier);
        }
    }

    [Browsable(true)]
    public new double Maximum
    {
        get
        {
            return (double)base.Maximum / _multiplier;
        }
        set
        {
            base.Maximum = (int)(value * _multiplier);
        }
    }

    [Browsable(true)]
    public new double Value
    {
        get
        {
            return (double)base.Value / _multiplier;
        }
        set
        {
            base.Value = (int)(value * _multiplier);
        }
    }

    [Browsable(true)]
    public new double SmallChange
    {
        get
        {
            return (double)base.SmallChange / _multiplier;
        }
        set
        {
            base.SmallChange = (int)(value * _multiplier);
        }
    }
}
2 голосов
/ 02 апреля 2010

Если вы привязываете данные, у вас есть класс данных, который имеет double OpacityForSlider (или что-то подобное), к которому вы привязали Value из TrackBar к.

Установите ползунки min и max на 0-100 и добавьте это к вашему классу данных

public double OpacityForForm
{
    get { return this.OpacityForSlider / 100; } 
}

Теперь свяжите ваши winforms Opacity с этим, а не OpacityForSlider

...