Cómo detectar el tiempo de diseño en un proyecto de biblioteca de control VS.NET 2003

StackOverflow https://stackoverflow.com/questions/144898

  •  02-07-2019
  •  | 
  •  

Pregunta

El siguiente código no funciona como se espera para detectar si está en modo de diseño (VS.Net 2003 - Control Library):

if (this.Site! = null & amp; & amp; this.Site.DesignMode == true)
{
  // Design Mode
}
else
{
  // Tiempo de ejecución
}

Se utiliza en un control de usuario complejo, derivado de otro control de usuario e incluyendo otros controles de usuario en él.
¿Hay otra forma de detectar el tiempo de diseño en un VS.NET 2003 o cuál es el problema con el código anterior?

¿Fue útil?

Solución

DesignMode no funcionará desde dentro de un constructor. Algunas alternativas (no estoy seguro de si funcionan en 1.1) son

if (System.ComponentModel.LicenseManager.UsageMode == System.ComponentModel.LicenseUsageMode.Designtime)

o

llame a GetService (typeof (IDesignerHost)) y vea si devuelve algo.

He tenido mejor suerte con la primera opción.

Otros consejos

Supongo que podría usar HttpContext.Current == null como se describe en http: / /west-wind.com/weblog/posts/189.aspx

En .Net 2.0 hay Control.DesignMode ( http://msdn.microsoft.com/en-us/library/system.web.ui.control.designmode.aspx ). Sin embargo, creo que tiene buenas razones para permanecer en VS 2003, por lo que la actualización podría no ser una opción para usted.

Actualizar Si está haciendo Winforms, Component.DesignMode ( http://msdn.microsoft.com/en-us/library/system.componentmodel.component.designmode.aspx ) es la forma correcta de comprobarlo. Sin embargo, si this.Site.DesignMode no funciona correctamente, es posible que Component.DesignMode no funcione tan bien como lo hace exactamente la comprobación que está realizando (Site! = Null & amp; & amp; Site.DesignMode).

Esto podría ser una posibilidad remota, pero ¿está seguro de que su control base no invalida la propiedad del sitio?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top