¿Cómo puedo unir una opacidad de WinForms a una barra de seguimiento (control deslizante)
-
24-09-2019 - |
Pregunta
Tengo una winform con un BindingSource
que tiene una propiedad int nombrada Opacity
en su DataSource
. Yo también tengo un TrackBar
en el winform que quiero usar para controlar el Opacity
de WinForm.
He atado al Value
propiedad en el TrackBar
hacia Opacity
y eso funciona bien, deslizando el TrackBar
cambiará la variable de TrackBar.Minimum
(0) a TrackBar.Maximum
(1).
También he atado el Opacity
Propiedad de la forma de ganar a este valor, sin embargo, desde el TrackBar
Los valores de los 's solo van de mínimo a máximo en +/- 1 en lugar de +/- .1 más o menos (como Opacity
lo hace), no se desvanece correctamente el winform. En cambio, 0 lo volverá opaco y lo 1 lo hará completamente visible.
Necesito una forma de trabajar dentro de la arquitectura descrita anteriormente, pero obtenga el TrackBar
Para cambiar su valor de 0 a 1 en incrementos definidos menores que 1.
Solución
Creo que la forma más limpia de hacer esto sería crear un UserControl
que hereda directamente de TrackBar
, que esconde el Value
, SmallChange
, Minimum
, Maximum
y TickFrequency
propiedades con el mismo nombre double
propiedades:
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);
}
}
}
Otros consejos
Si está databinding, entonces tiene una clase de datos que tiene un double OpacityForSlider
(o algo similar) que has atado al Value
del TrackBar
a.
Establezca los controles deslizantes min y max a 0-100 y agregue esto a su clase de datos
public double OpacityForForm
{
get { return this.OpacityForSlider / 100; }
}
Ahora ata tus winforms Opacity
a eso, en lugar de OpacityForSlider