Frage

Ich habe eine Winform mit einem BindingSource Das hat eine int -Eigenschaft mit dem Namen Opacity in seinem DataSource. Ich habe auch ein TrackBar Auf der Winform, mit der ich die steuern möchte Opacity der Winform.

Ich habe die gebunden Value Eigentum auf der TrackBar zum Opacity und das funktioniert gut, das schieben die TrackBar verändert die Variable von TrackBar.Minimum (0) zu TrackBar.Maximum (1).

Ich habe auch das gebunden Opacity Eigentum der Winform zu diesem Wert jedoch seit der TrackBarDie Werte gehen nur in +/- 1 an minimal bis maximal anstatt +/- .1 oder so (wie wie Opacity tut), es verblasst die Winform nicht richtig. Stattdessen dreht 0 es undurchsichtig und 1 wird es vollständig sichtbar.

Ich brauche eine Möglichkeit, innerhalb der oben beschriebenen Architektur zu arbeiten, aber das bekomme das TrackBar Um seinen Wert von 0 auf 1 in definierten Schritten kleiner als 1 zu ändern.

War es hilfreich?

Lösung

Ich denke, der sauberste Weg, dies zu tun UserControl das erbt direkt von TrackBar, das verbirgt die Value, SmallChange, Minimum, Maximum und TickFrequency Eigenschaften mit gleichem Namen double Eigenschaften:

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

Andere Tipps

Wenn Sie Datenbasis haben, haben Sie eine Datenklasse, die eine hat double OpacityForSlider (oder ähnliches), dass Sie die gebunden haben Value des TrackBar zu.

Stellen Sie die Sliders Min und Max auf 0-100 ein und fügen Sie diese Ihrer Datenklasse hinzu

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

Binden Sie jetzt Ihre Winforms Opacity dazu eher als OpacityForSlider

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top