2011-11-16 16 views
15

Ho una classe (controllo), esecuzione ICustomTypeDescriptor, che viene utilizzato sia in fase di progettazione e run-time da PropertyGrid per la personalizzazione. Ho bisogno di esporre le diverse proprietà in fase di progettazione (controlli standard proprietà come width, height e così via) e in fase di esecuzione, quando PropertyGrid è usato nel mio programma per modificare altre proprietà di quel controllo.Come sapere se un controllo è in fase di progettazione o no?

Il mio codice è simile:

class MyControl : UserControl, ICustomTypeDescriptor 
{ 
    //Some code.. 

    public PropertyDescriptorCollection GetProperties(Attribute[] attributes) 
    { 
     return GetProperties(); 
    } 

    public PropertyDescriptorCollection GetProperties() 
    { 
     //I need to do something like this: 
     if (designTime) 
     { //Expose standart controls properties 
      return TypeDescriptor.GetProperties(this, true); 
     } 
     else 
     { 
      //Forming a custom property descriptor collection 
      PropertyDescriptorCollection pdc = new PropertyDescriptorCollection(null); 
      //Some code.. 
      return pdc; 
     } 
    } 
} 

Esiste un analogico per una bandiera in fase di progettazione in C#? È forse meglio usare la compilazione condizionale?

+1

Stai parlando di wpf o winform? –

+0

Possibile duplicato di * [Come sapere se il codice .NET viene eseguito da Visual Studio Designer] (http://stackoverflow.com/questions/73515/how-to-tell-if-net-code-is-being- run-by-visual-studio-designer) *. –

risposta

10

Verificare se DesignMode è vero o falso. È una proprietà che appartiene alla classe della base di controllo.

+2

In realtà appartiene alla classe base 'System.ComponentModel.Component'. – tafa

8

La bandiera dovrebbe essere DesignMode. Quindi il codice dovrebbe apparire come segue

public PropertyDescriptorCollection GetProperties() 
{ 
    //I need to do something like this: 
    if (this.DesignMode) 
    { //Expose standart controls properties 
     return TypeDescriptor.GetProperties(this, true); 
    } 
    else 
    { //Forming a custom property descriptor collection 
     PropertyDescriptorCollection pdc = new PropertyDescriptorCollection(null); 
     //Some code.. 
     return pdc;  
    } 
} 

Ecco il secondo MSDN doc.

3

utilizzare la proprietà DesignMode della base. Questo ti parlerà della modalità.

Problemi correlati