Reputation: 19446
I've got a winform with a BindingSource
that has an int property named Opacity
in its DataSource
. I also have a TrackBar
on the winform that I want to use to control the Opacity
of the winform.
I've bound the Value
property on the TrackBar
to the Opacity
and that functions just fine, sliding the TrackBar
will change the variable from TrackBar.Minimum
(0) to TrackBar.Maximum
(1).
I've also bound the Opacity
property of the winform to this value, however, since the TrackBar
's values only go from Minimum to Maximum in +/-1 rather than +/- .1 or so (like Opacity
does), it doesn't properly fade the winform. Instead, 0 will turn it opaque and 1 will turn it fully visible.
I need a way to work within the architecture described above, but get the TrackBar
to change its value from 0 to 1 in defined increments smaller than 1.
Upvotes: 3
Views: 1913
Reputation: 75336
I think the cleanest way to do this would be to create a UserControl
that inherits directly from TrackBar
, that hides the Value
, SmallChange
, Minimum
, Maximum
and TickFrequency
properties with same-named double
properties:
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);
}
}
}
Upvotes: 2
Reputation: 19446
If you're databinding then you have a data class that has a double OpacityForSlider
(or something similar) that you've bound the Value
of the TrackBar
to.
Set the sliders min and max to 0-100 and add this to your data class
public double OpacityForForm
{
get { return this.OpacityForSlider / 100; }
}
Now bind your winforms Opacity
to that, rather than OpacityForSlider
Upvotes: 2