Como posso vincular uma opacidade Winforms a um trackbar (slider)
-
24-09-2019 - |
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 TrackBar
Os 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.
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