سؤال

في الصافية، لدي السيطرة الموروثة:

public CustomComboBox : ComboBox

وأريد ببساطة لتغيير القيمة الافتراضية للممتلكات DropDownStyle، إلى قيمة أخرى (ComboBoxStyle.DropDownList) إلى جانب افتراضية واحدة المحددة في الفئة الأساسية (ComboBoxStyle.DropDown).

ويمكن للمرء أن تعتقد أنك يمكن أن مجرد إضافة المنشئ:

public CustomComboBox()
{
     this.DropDownStyle = ComboBoxStyle.DropDownList;
}

ومع ذلك، فإن هذا النهج يخلط استوديو مصمم البصرية. عند تصميم تحكم مخصصة في Visual Studio، إذا قمت بتحديد ComboBoxStyle.DropDown لDropDownStyle أنه يعتقد أن الخاصية التي حددتها لا تزال هي القيمة الافتراضية (من [DevaultValue ()] في الدرجة تحرير وسرد القاعدة)، لذلك لا إضافة سطر customComboBox.DropDownStyle = ComboBoxStyle.DropDown إلى الملف Designer.cs. ومشوش بما فيه الكفاية، تجد أن الشاشة لا تتصرف على النحو المنشود مرة ركض.

وحسنا لا يمكنك تجاوز الخاصية DropDownStyle لأنه ليس الظاهري، ولكن يمكن القيام به:

[DefaultValue(typeof(ComboBoxStyle), "DropDownList")]
public new ComboBoxStyle DropDownStyle
{
      set { base.DropDownStyle = value; }
      get { return base.DropDownStyle; }
}

ولكن بعد ذلك سوف واجهت مشاكل من الفروق الدقيقة في استخدام الإعلانات "الجديدة". لقد حاولت ذلك وأنه لا يبدو أن الحق في العمل كمصمم استوديو البصرية يحصل الخلط من هذا النهج أيضا وقوات ComboBoxStyle.DropDown (الافتراضي للفئة الأساسية).

هل هناك أي طريقة أخرى للقيام بذلك؟ عذرا للسؤال مطول، فمن الصعب أن يصف بالتفصيل.

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

المحلول

وهذا يبدو وكأنه يعمل:

public class CustomComboBox : ComboBox
{
    public CustomComboBox()
    {
        base.DropDownStyle = ComboBoxStyle.DropDownList;
    }

    [DefaultValue(ComboBoxStyle.DropDownList)]
    public new ComboBoxStyle DropDownStyle
    {
        set { base.DropDownStyle = value; Invalidate(); }
        get { return base.DropDownStyle;}
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top