2010-12-03 15 views
19

aprendí sobre DesignMode aquí How to refresh a winform custom control at design time after changing a propertyWinform control personalizado: DesignMode no vuelve verdadera mientras que en el modo de diseño

Pero cuando en el constructor de mi control personalizado que lo uso, nunca se devuelve verdadero, así que cuando arrastrarlo mi control personalizado siempre muestra max = 200, entonces, ¿qué pasa?

if (this.DesignMode) 
{     
    this.Min = 0; 
    this.Max = 100; 
} 
else 
{ 
    this.Min = 0; 
    this.Max = 200;    
} 

this.LabMin.Text = this.Min.ToString(); 
this.LabMax.Text = this.Max.ToString(); 
+0

¿Alguna razón particular por la que desea que el valor máximo sea mayor en tiempo de ejecución que en tiempo de diseño? –

+0

No, solo es para probar el modo de diseño 2 valor diferente :) – user310291

Respuesta

34

LicenseManager.UsageMode está destinado para esto.

De hecho, es la única manera confiable de detectar si su control está en modo diseño o no. Solo es válido durante el constructor, pero puede almacenarse fácilmente en un campo de la clase para referencia posterior.

La propiedad DesignMode para los controles anidados será falsa incluso cuando el control del contenedor esté en modo de diseño.

+4

Gracias por su sugerencia, lo intentaré pero esto es realmente feo de Microsof Estoy muy enojado, dándome un nombre que no me gusta Hacer lo que su nombre pretende es una pena. – user310291

+0

Qué campo completamente inútil. Gracias Microsoft, Dios. –

3

Por lo que recuerdo en el Ctor, la propiedad DesignMode no tiene su valor todavía. Debe usarlo después de initializeComponents o en un controlador de eventos.

+0

+1 Esto es principalmente correcto: la propiedad 'DesignMode' siempre devolverá" False "en un método constructor. Sin embargo, no se puede contar con una llamada al método 'InitializeComponents' para cambiar este comportamiento de manera confiable. Debe usarlo en un controlador de eventos (como se sugiere), una propiedad u otro método. –

4

Podría ser que el control debe también debe tener un ISite asociado a él, de lo contrario, siempre devolverá false

El indicador de modo de diseño se almacena en ISite; por lo tanto, si el Componente no tiene un ISite asociado con , el valor de esta propiedad es falso.

Fuente: MSDN

Editar: También vea este post como alguien tenía un problema similar al que estás frente a

Windows Forms designer and DesignMode property issues

Editar 2: Yo también encontró un sitio que parece indicar que este es un problema común con los controles personalizados pero también enumera algunas soluciones alternativas. Lo puedes encontrar aquí:

Custom Control Design Mode Problem

+1

Wow gracias pero qué lío feo de plomería solo para hacer algo simple en realidad a veces odio a Microsoft :) – user310291

Cuestiones relacionadas