2010-04-02 7 views
2

J'ai un winform avec un BindingSource qui a une propriété int nommée Opacity dans sa DataSource. J'ai aussi un TrackBar sur le winform que je veux utiliser pour contrôler le Opacity du winform.Comment lier une Opacité de Winforms à un TrackBar (curseur)

Je suis lié la propriété Value sur le TrackBar au Opacity et qui fonctionne très bien, faisant glisser le TrackBar va changer la variable de TrackBar.Minimum (0) à TrackBar.Maximum (1).

J'ai aussi lié la propriété Opacity du WinForm à cette valeur, cependant, étant donné que les valeurs du TrackBar ne passe du minimum au maximum en +/- 1 au lieu de +/- 0,1 ou si (comme Opacity fait), il ne s'estompe pas correctement le winform. A la place, 0 le rendra opaque et 1 le rendra complètement visible.

je besoin d'un moyen de travailler dans l'architecture décrite ci-dessus, mais obtenir le TrackBar pour changer sa valeur de 0 à 1 par incréments plus petits que définis 1.

Répondre

2

Je pense que la façon la plus propre à faire ce serait de créer un UserControl qui hérite directement de TrackBar, qui cache les Value, SmallChange, Minimum, Maximum et TickFrequency propriétés avec du même nom double propriétés:

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

Cela pourrait être assez propre! +1 J'évitais cela parce que, pour une raison quelconque, je pensais "écrire votre propre TrackBar" plutôt que simplement "étendre le TrackBar existant" –

+0

Eh bien, c'est plus sexy que mon approche, donc je la marque comme la réponse :) –

2

Si vous databinding alors vous avez un classe de données qui a un double OpacityForSlider (ou quelque chose de similaire) que vous avez lié le Value du TrackBar à.

Réglez les curseurs min et max à 0-100 et ajoutez ceci à votre classe de données

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

Rabattre votre WinForms Opacity que, plutôt que OpacityForSlider

+0

+1 J'aime le vôtre mieux. – MusiGenesis

+1

Attendez une seconde - vous êtes vous! – MusiGenesis

+0

Yah Je me suis rendu compte de cette approche juste après avoir posté la question, bien que j'aime votre approche parce que vous obtenez vraiment à la viande de la question, "Comment puis-je obtenir les valeurs que je veux de la' TrackBar' ". Le vôtre est plus flexible et pourrait être réutilisé beaucoup –

Questions connexes