Domanda

Ho una WinForm con un BindingSource che ha una proprietà di nome int Opacity nella sua DataSource. Ho anche un TrackBar sul WinForm che voglio utilizzare per controllare il Opacity della homepage.

Ho legato la proprietà Value sul TrackBar al Opacity e che funzioni bene, trascinando il TrackBar cambierà la variabile da TrackBar.Minimum (0) per TrackBar.Maximum (1).

Ho anche legato alla proprietà Opacity del winform a questo valore, tuttavia, dal momento che i valori del TrackBar solo andare dal minimo al massimo a +/- 1 invece di +/- 0,1 o giù di lì (come Opacity fa), essa non svanisce correttamente il WinForm. Invece, 0 girerà opaco e 1 si accende completamente visibile.

Ho bisogno di un modo di lavoro all'interno dell'architettura descritta sopra, ma ottenere il TrackBar per modificarne il valore da 0 a 1 con incrementi definiti minore di 1.

È stato utile?

Soluzione

Penso che il modo più pulito per farlo sarebbe quello di creare un UserControl che eredita direttamente da TrackBar, che nasconde la proprietà Value, SmallChange, Minimum, Maximum e TickFrequency con con lo stesso nome proprietà double:

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

Altri suggerimenti

Se stai associazione dati allora avete una classe di dati che ha un double OpacityForSlider (o qualcosa di simile) che avete vincolato il Value del TrackBar a.

Imposta i cursori Min e Max per 0-100 e aggiungere questo alla tua classe di dati

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

Ora vincolare il proprio WinForms Opacity a che, piuttosto che OpacityForSlider

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top