2011-01-27 25 views
10

Tengo un problem al mostrar un componente en Designer.Directiva de preprocesador "Design Mode"

Identifiqué el código "malo" que al diseñador no le gusta.

Ahora, el problema es que no puedo "comentar" el tiempo de diseño solo con las directivas de preprocesador.

Ahora, he intentado (para VB.NET) la siguiente

#If Not Debug Then 
Private Sub myWpfComponent_ItsEvent(sender, args) Handles myWpfComponent.ItsEvent 
... 
#End If 

esto ... trabajé, y ahora se muestra sin problemas en el diseñador.

El problema ahora que me temo no puede eliminar errores correctamente este componente.

lo tanto, estoy buscando una solución alternativa a la

#If Not DESIGN_TIME Then 
#End If 

¿Hay algo similar?

+1

¿Cuál es el código del problema? –

+0

@Daniel A. White: Vea el enlace en la palabra "problema".Winforms Designer "no me gusta" manejar eventos en un control alojado Wpf. – serhio

+0

No entiendo por qué es necesario hacer esto con una directiva de preprocesador. ¿Qué ocurre con el método ['DesignerProperties.GetIsInDesignMode'] (http://msdn.microsoft.com/en-us/library/system.componentmodel.designerproperties.getisindesignmode.aspx)? –

Respuesta

9

No puede lograr esto a través del preprocesador. Esto se debe a que puede ejecutar un ejecutable de depuración fuera de VS (pruébelo, haga doble clic en el EXE generado por VS en modo de depuración).

De todos modos, hay una (no preprocesador basado) Propiedad tiempo de ejecución que podría ayudar:

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

Estas páginas web ayudarán y tienen otros métodos de comprobación de modo de diseño en tiempo de ejecución:

http://msdn.microsoft.com/en-us/library/c58hb4bw(vs.71).aspx

http://weblogs.asp.net/fmarguerie/archive/2005/03/23/395658.aspx

+0

Según la mención de OP de "myWpfComponent_ItsEvent", parece una pregunta de WPF. La propiedad que mencionaste es para WinForms, no para WPF. –

+0

Las páginas a las que se hace referencia tienen otras formas de verificar más el diseño, verifique el segundo enlace –

+0

Puedo usar "si" solo dentro de un método. No fuera de él :) – serhio

4

El IDE no reconstruye el código para mostrar al diseñador. Utiliza el binario que ya has construido. Entonces una directiva de preprocesador no ayudará.

Como mencionas myWpfComponent_ItsEvent, supongo que esta es una pregunta de WPF. En WPF, usted detecta el modo de diseño usando GetIsInDesignMode.

+0

sí. Pero echa un vistazo una vez más a mi código. Necesito "ignorar" un método completo, o maneja en VB, o atajo de evento en C#. No puedo usar el método "si" ** fuera ** clásico (para ignorar todo el método) – serhio

+1

¿Por qué necesita hacerlo fuera del método? Simplemente agregue 'if (DesignerProperties.IsInDesignMode (this)) return;' como la primera cosa en su método. Voilà: su método ya no hace nada en el modo de diseño. –

2

Su problema es utilizar un control WPF escrito en VB.NET en el diseñador de WinForms. Si el controlador de eventos está causando problemas, puede usar AddHandler en lugar de WithEvents y Handles para condicionalizar el código de su controlador. Una vez que esté usando AddHandler, puede ajustar la adición del controlador en If utilizando los métodos descritos en la respuesta de @gmagana.

Ver esta respuesta de la diferencia entre las manijas y AddHandler:

+0

Digamos, el control WPF está escrito en C#, pero el control de host está en VB :). De todos modos, pensé en esta solución que parece ser la única en funcionar. Gracias. – serhio

3

Uso:

if (!DesignerProperties.GetIsInDesignMode(this)) 
{ 
    //Code to not execute in design mode 
} 

Nota que "este" identificador puede ser cualquier DependencyObject

Cuestiones relacionadas