2011-08-14 19 views

cevap

9

kullanın bu özelliğin gibi bir şey gördüklerinde kullanıcılar karıştı olacaktır: miras için

[Browsable(false)] 
public bool AProperty {...} 

özellikleri:

:

[Browsable(false)] 
public override bool AProperty {...} 

başka bir fikir (tüm temel sınıf üyelerini gizlemek için çalışıyoruz beri)

ve sonra özellik ızgara için:

MyCtrl tx = new MyCtrl(); 
    pg1.SelectedObject = tx.ExtraProperties; 

aşağı tarafı MyCtrl özelliklerini gizlemek için

tx.ExtraProperties.PropertyA = "foo"; 
+0

, ben temel sınıf özelliklerini gizlemek istiyorum. Bu durumda: TextBox sahne. Temel sınıf sahne nasıl gizlenir? soru bu. –

+0

Evet, işe yarıyor, biliyorum. Sorgumda şu soruyu görüyorsunuz: "Bu durumda hangi teknik uygulanabilir? Saklanmak mı? Temel sınıfın her bir pervanesi mi?" ... Sadece merak ettim ki öznitelikleri filtreleyebilirim ... ama çalışma zamanı gibi değil tüm nitelikler derlenmiş derleme için statik olduğundan, mümkün. –

+0

Lars, lütfen cevabımı okuyun. Tam olarak ihtiyacım olan şey buydu ... –

6

için

tx.PropertyA = "foo"; 

gelenler özelliklerinin erişim düzeyinizi değiştirir olduğunu, kullanım Tesiste [Browsable(False)] özniteliği. gizlemek için

[Browsable(false)] 
public bool AProperty { get; set;} 

proeprties miras, üsse geçersiz kılmak ve göz atılabilir niteliğini uygulamak gerekir.

[Browsable(false)] 
public override string InheritedProperty { get; set;} 

Not: Sen koşullara bağlı olarak virtual veya new anahtar kelime eklemek gerekebilir.

ControlDesigner kullanmak daha iyi bir yaklaşım olacaktır. Tasarımcının, PropertyGrid tarafından çıkarılmış olan koleksiyona fazladan özellikler eklemek için kullanılabilen PreFilterProperties adı verilen bir geçersiz kılma vardır.

Designer(typeof(MyControlDesigner))] 
public class MyControl : TextBox 
{ 
    // ... 
} 

public class MyControlDesigner : ... 
{ 
    // ... 

    protected override void PreFilterProperties(
          IDictionary properties) 
    { 
     base.PreFilterProperties (properties); 

     // add the names of proeprties you wish to hide 
     string[] propertiesToHide = 
        {"MyProperty", "ErrorMessage"}; 

     foreach(string propname in propertiesToHide) 
     { 
      prop = 
       (PropertyDescriptor)properties[propname]; 
      if(prop!=null) 
      { 
       AttributeCollection runtimeAttributes = 
              prop.Attributes; 
       // make a copy of the original attributes 

       // but make room for one extra attribute 

       Attribute[] attrs = 
        new Attribute[runtimeAttributes.Count + 1]; 
       runtimeAttributes.CopyTo(attrs, 0); 
       attrs[runtimeAttributes.Count] = 
           new BrowsableAttribute(false); 
       prop = 
       TypeDescriptor.CreateProperty(this.GetType(), 
          propname, prop.PropertyType,attrs); 
       properties[propname] = prop; 
      }    
     } 
    } 
} 

Sen temiz bir şekilde ayrılmasına izin verir propertiesToHide için gizlemek istediğiniz proeprties isimlerini ekleyebilir.

Kredi nereye ödenecek: Yaklaşık sınıf miras değil http://www.codeproject.com/KB/webforms/HidingProperties.aspx#

+0

bu doğru .. teşekkürler. ne anlama gelir ("<{0}: MyControl runat =" server ">")? , ASP'den mi? WinForms kullanıyorum ... –

+0

Evet. Winforms için bu bölümü göz ardı edebilirsiniz. Cevabımı güncelleyeceğim. – Mrchief

+0

Denedim, ama yardımcı olmadı. RUNTIME süresince çalışır mı? –