Pergunta

Eu tenho um Winform com um BindingSource que tem uma propriedade int chamada Opacity em seu DataSource. eu tambem tenho um TrackBar no Winform que eu quero usar para controlar o Opacity do Winform.

Eu vinculei o Value propriedade no TrackBar para o Opacity E isso funciona muito bem, deslizando o TrackBar mudará a variável de TrackBar.Minimum (0) para TrackBar.Maximum (1).

Eu também vinculei o Opacity propriedade do Winform a esse valor, no entanto, desde o TrackBarOs valores só passam do mínimo ao máximo em +/- 1 em vez de +/- .1 ou mais (como Opacity faz), ele não desaparece corretamente o Winform. Em vez disso, 0 transformará o opaco e 1 o tornará totalmente visível.

Eu preciso de uma maneira de trabalhar na arquitetura descrita acima, mas obtenha o TrackBar Alterar seu valor de 0 para 1 em incrementos definidos menores que 1.

Foi útil?

Solução

Eu acho que a maneira mais limpa de fazer isso seria criar um UserControl Isso herda diretamente de TrackBar, que esconde o Value, SmallChange, Minimum, Maximum e TickFrequency propriedades com o mesmo nome double propriedades:

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);
        }
    }
}

Outras dicas

Se você estiver no banco de dados, então você tem uma classe de dados que tem um double OpacityForSlider (ou algo semelhante) que você ligou o Value do TrackBar para.

Defina os Sliders Min e Max a 0-100 e adicione-o à sua classe de dados

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

Agora vincule suas formas de win Opacity para isso, ao invés de OpacityForSlider

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top