3

我有一个带有 a 的 winform,其中有一个名为 int的BindingSource属性。我也有一个我想用来控制winform的winform。OpacityDataSourceTrackBarOpacity

我已经将Value属性绑定TrackBar到了Opacity并且功能很好,滑动TrackBar会将变量从TrackBar.Minimum(0)更改为TrackBar.Maximum(1)。

我也Opacity将 winform 的属性绑定到这个值,但是,因为TrackBar's 的值只从 +/-1 的最小值到最大值而不是 +/- .1 左右(就像Opacity那样),所以它不会正确淡化winform。相反,0 将使其不透明,1 将使其完全可见。

我需要一种在上述架构中工作的方法,但要TrackBar以小于 1 的定义增量将其值从 0 更改为 1。

4

2 回答 2

2

如果你是数据绑定,那么你有一个数据类,它有一个double OpacityForSlider(或类似的)你已经绑定到ValueTrackBar

将滑块最小值和最大值设置为 0-100 并将其添加到您的数据类

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

现在将你的winforms绑定Opacity到那个,而不是OpacityForSlider

于 2010-04-02T16:33:40.813 回答
2

我认为最干净的方法是创建一个UserControl直接继承自TrackBar的,隐藏具有同名属性的ValueSmallChangeMinimum和属性:MaximumTickFrequencydouble

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);
        }
    }
}
于 2010-04-02T16:42:31.993 回答