c# .net design design-time

c# - ¿Cómo saber si un control está en tiempo de diseño o no?



.net design (3)

Tengo una clase (control), implementando ICustomTypeDescriptor, que se usa tanto en tiempo de diseño como en tiempo de ejecución por PropertyGrid para la personalización. Necesito exponer diferentes propiedades en tiempo de diseño (propiedades de controles estándar como width , height , etc.) y en tiempo de ejecución, cuando se usa PropertyGrid en mi programa para cambiar otras propiedades de ese control.

Mi código es como:

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

¿Hay un análogo para una bandera de tiempo de diseño en C #? ¿Es quizás mejor utilizar la compilación condicional?


La bandera debe ser DesignMode . Por lo tanto, su código debe verse de la siguiente manera

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

Aquí está el doc de acuerdo con MSDN .


Compruebe si DesignMode es verdadero o falso. Es una propiedad que pertenece a la clase base de control.


Use la propiedad DesignMode de la base. Esto le informará sobre el modo.