2008-12-03 16 views
8

Tengo un control de usuario que estoy creando. Su propósito es mostrar el estado de una clase para el usuario. Obviamente, esto no importa, y ralentizará las cosas cuando el control se ejecuta en el IDE, ya que lo hace tan pronto como lo agrega a un formulario.¿Cómo puedo detectar si un control de usuario se está ejecutando en el IDE, en el modo de depuración o en el EXE liberado?

Una forma de evitar esto sería crear el control y agregarlo a la colección de controles del formulario en tiempo de ejecución. Pero esto parece menos que perfecto.

¿Hay alguna manera de establecer un indicador en el control para que pueda omitir ciertas secciones de código en función de cómo se está ejecutando?

p.s. Estoy usando C# y VS 2008

Respuesta

15
public static bool IsInRuntimeMode(IComponent component) { 
    bool ret = IsInDesignMode(component); 
    return !ret; 
} 

public static bool IsInDesignMode(IComponent component) { 
    bool ret = false; 
    if (null != component) { 
     ISite site = component.Site; 
     if (null != site) { 
      ret = site.DesignMode; 
     } 
     else if (component is System.Windows.Forms.Control) { 
      IComponent parent = ((System.Windows.Forms.Control)component).Parent; 
      ret = IsInDesignMode(parent); 
     } 
    } 

    return ret; 
} 
+0

impresionante! Gracias. ¡Eso es mucho más fácil de lo que creía! – RichieACC

+0

¿Alguna idea de por qué la propiedad del sitio siempre es nula en el objeto de mi página? – TGnat

+0

Porque el diseñador de webforms no admite este escenario. No sé por qué :(. Esta solución funciona en el diseñador de componentes (no en UI) y en el diseñador de winforms. Debería funcionar también en diseñadores de terceros no web. – TcKs

4

Encontré esta respuesta en otra publicación y parece ser más fácil y funciona mejor para mi situación.

Detecting design mode from a Control's constructor

using System.ComponentModel; 

if (LicenseManager.UsageMode == LicenseUsageMode.Runtime) 
{ 
} 
Cuestiones relacionadas