كيف يمكنني ربط عتامة winforms إلى شريط التتبع (شريط التمرير)
-
24-09-2019 - |
سؤال
لقد حصلت على 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