Wie kann ich eine Winformopazität an eine Trackbar binden (Schieberegler)
-
24-09-2019 - |
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 TrackBar
Die 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.
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