2011-11-16 16 views
15

Mam klasy (kontrola), wdrażanie ICustomTypeDescriptor, który jest używany zarówno w czasie projektowania i wykonywania przez PropertyGrid do dostosowywania. Muszę eksponować różne właściwości w czasie projektowania (standardowe właściwości kontrolne, takie jak width, height itd.) Oraz w czasie wykonywania, gdy właściwość PropertyGrid jest używana w moim programie do zmiany innych właściwości tego formantu.Jak sprawdzić, czy kontrola jest w czasie projektowania, czy nie?

Moje kod jest podobny:

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

Czy istnieje analogowe flagą czasu projektowania w języku C#? Czy może lepiej użyć kompilacji warunkowej?

+1

Czy mówisz o wpf lub winform? –

+0

Możliwy duplikat * [Jak sprawdzić, czy kod .NET jest uruchamiany przez projektanta Visual Studio] (http://stackoverflow.com/questions/73515/how-to-tell-if-net-code-is-being- run-by-by-visual-studio-designer) *. –

Odpowiedz

10

Sprawdź, czy DesignMode ma wartość true lub false. Jest to właściwość, która należy do klasy podstawowej kontroli.

+2

Właściwie należy do klasy bazowej 'System.ComponentModel.Component'. – tafa

8

Flaga powinna być DesignMode. Stąd Twój kod powinien wyglądać następująco

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

Oto według MSDN doc.

3

Skorzystaj z właściwości bazy w postaci DesignMode. Dzięki temu dowiesz się o trybie.

Powiązane problemy