¿Cómo puedo unir una opacidad de WinForms a una barra de seguimiento (control deslizante)

StackOverflow https://stackoverflow.com/questions/2567799

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 TrackBarLos 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.

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top