Comment puis-je lier un WinForms Opacité à un TrackBar (curseur)
-
24-09-2019 - |
Question
J'ai un WinForm avec un BindingSource
qui a une propriété int Opacity
nommé dans son DataSource
. J'ai aussi un TrackBar
sur le WinForm que je veux utiliser pour contrôler la Opacity
du WinForm.
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 de l'TrackBar
ne passe du minimum au maximum en +/- 1 au lieu de +/- 0,1 ou si (comme Opacity
fait), il ne se décolore pas correctement la WinForm. Au lieu de cela, 0 tournera opaque et 1 tournera pleinement 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 définis inférieurs à 1.
La solution
Je pense que la plus propre façon de le faire serait de créer un UserControl
qui hérite directement de TrackBar
, qui cache les propriétés Value
, SmallChange
, Minimum
, Maximum
et TickFrequency
ayant des propriétés double
même nom:
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);
}
}
}
Autres conseils
Si vous databinding alors vous avez une classe de données qui a un double OpacityForSlider
(ou quelque chose de similaire) que vous avez lié le Value
du TrackBar
à.
Régler les curseurs min et max à 0-100 et ajouter à votre classe de données
public double OpacityForForm
{
get { return this.OpacityForSlider / 100; }
}
Rabattre votre WinForms Opacity
que, plutôt que OpacityForSlider