2008-10-02 22 views
9

.net, ben Kalıtsal kontrole sahip:Kalıtsal .net kumanda üzerindeki bir özelliğin DefaultValue Değişen

public CustomComboBox : ComboBox 

ben sadece başka bir değere, DropDownStyle özelliğinin varsayılan değeri değiştirmek istediğiniz (ComboBoxStyle. DropDownList), temel sınıfta (ComboBoxStyle.DropDown) belirtilen varsayılanın dışında.

biri sadece kurucu ekleyebilirsiniz düşünebilir:

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

Ancak, bu yaklaşım Visual Studio Designer karıştıracaktır. Visual Studio'da özel denetim tasarlarken, DropDownStyle için ComboBoxStyle.DropDown'ı seçerseniz, seçtiğiniz özelliğin hala varsayılan değer olduğunu (temel ComboBox sınıfındaki [DevaultValue()] öğesinden) olduğunu düşünür. Designer.cs dosyasına bir customComboBox.DropDownStyle = ComboBoxStyle.DropDown satırı ekleyin. Ve kafa karıştırıcı bir şekilde, ekranın çalıştırıldığı gibi davranmadığını görürsünüz.

Peki bu sanal olmadığından size DropDownStyle özelliği geçersiz kılamaz, ancak yapabileceği:

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

ama o zaman "yeni" bildirimleri kullanarak nüansları gelen derde çalışacaktır. Bunu denedim ve görsel stüdyo tasarımcısı da bu yaklaşımdan kafa karıştırıcı ve ComboBoxStyle.DropDown (temel sınıf için varsayılan) zorlar gibi doğru çalışmıyor gibi görünmüyor.

Bunu yapmak için başka bir yolu var mı? Ayrıntılı soru için özür dilerim, ayrıntılı olarak açıklamak zordur. Çalışır gibi

cevap

9

Bu arar:

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;} 
    } 
} 
+5

bir utanç sadece bir öznitelik eklemek için özellik yeniden uygulamaya gerek kalmadan bunu başarmak için bir yol değil mi. – Pondidum