كيف يمكنني ربط عتامة winforms إلى شريط التتبع (شريط التمرير)

StackOverflow https://stackoverflow.com/questions/2567799

سؤال

لقد حصلت على winform مع أ BindingSource التي تحتوي على خاصية int اسمها Opacity فيها DataSource. لدي أيضا ملف TrackBar على winform الذي أريد استخدامه للتحكم في Opacity من winform.

لقد ربطت Value خاصية على TrackBar إلى Opacity وهذا يعمل على ما يرام ، انزلاق TrackBar سوف يغير المتغير من TrackBar.Minimum (0) إلى TrackBar.Maximum (1).

لقد ربطت أيضا Opacity خاصية winform لهذه القيمة ، ومع ذلك ، منذ TrackBarتنتقل قيم S فقط من الحد الأدنى إلى الحد الأقصى في +/- 1 بدلاً من +/- .1 أو نحو ذلك (مثل Opacity هل) ، لا يتلاشى بشكل صحيح. بدلاً من ذلك ، سيحول 0 غامضة وسيحولها 1 مرئيًا تمامًا.

أحتاج إلى وسيلة للعمل في الهندسة المعمارية الموضحة أعلاه ، ولكن احصل على TrackBar لتغيير قيمتها من 0 إلى 1 بزيادات محددة أصغر من 1.

هل كانت مفيدة؟

المحلول

أعتقد أن أنظف طريقة للقيام بذلك هي إنشاء ملف UserControl التي ترث مباشرة من TrackBar, أن يخفي Value, SmallChange, Minimum, Maximum و TickFrequency خصائص مع نفس اسم double الخصائص:

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);
        }
    }
}

نصائح أخرى

إذا كنت تقوم بتجميع البيانات ، فلديك فئة بيانات تحتوي على ملف double OpacityForSlider (أو شيء مشابه) أنك ربطت Value التابع TrackBar إلى.

اضبط Sliders Min و Max إلى 0-100 وأضف هذا إلى فئة البيانات الخاصة بك

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

الآن ربط winforms الخاص بك Opacity لذلك ، بدلا من OpacityForSlider

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top