3

で名前が付けられBindingSourceた int プロパティを持つwinform があります。また、winform の制御に使用したい winformもあります。OpacityDataSourceTrackBarOpacity

Valueのプロパティを にバインドTrackBarし、Opacityそれが正常に機能するようにしました。スライドするTrackBarと、変数がTrackBar.Minimum(0) からTrackBar.Maximum(1) に変更されます。

Opacitywinformのプロパティもこの値にバインドしましたが、TrackBarの値は +/- .1 などではなく +/-1 で最小値から最大値までしか移動しないため (そうOpacityではありません)、そうではありません。 winform を適切にフェードします。代わりに、0 で不透明になり、1 で完全に表示されます。

上記のアーキテクチャ内で動作する方法が必要ですが、 を取得して、TrackBarその値を 0 から 1 に 1 より小さい定義された増分で変更します。

4

2 に答える 2

2

これを行う最もクリーンな方法は、UserControlを直接継承し、 、、、および同名のプロパティを持つプロパティをTrackBar非表示にする を作成することだと思います。ValueSmallChangeMinimumMaximumTickFrequencydouble

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 に答える
2

データバインディングを行っている場合は、double OpacityForSliderをバインドした (または同様のもの) を持つデータクラスがあります。ValueTrackBar

スライダーの最小値と最大値を 0 ~ 100 に設定し、これをデータ クラスに追加します。

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

Opacityではなく、winforms をそれにバインドします。OpacityForSlider

于 2010-04-02T16:33:40.813 に答える