2009-10-05 31 views
15

que tiene el valor de mostrar utilizando correctamente:¿Cómo establecer el valor predeterminado de colores en un control personalizado en Winforms?

[DefaultValue (typeof (Color), "255, 0, 0")] 
    public Color LineColor 
    { 
     get { return lineColor; } 
     set { lineColor = value; Invalidate (); } 
    } 

Pero después de cargar el proyecto se utiliza el control, este valor es el blanco, que puedo invocar Restablecer para volver a la Red de nuevo, pero No entiendo el problema.

¿Cómo se supone que debes establecer el valor predeterminado y asegurarte de que se conserve a menos que cambie el valor manualmente del valor predeterminado?

En realidad, también estoy haciendo esto, que establece Back y ForeColor a estos valores y el editor de propiedades de VS los muestra como si fueran cambiados del valor predeterminado.

¿Esto está mal?

public CoolGroupBox () 
    { 
     InitializeComponent (); 
     base.BackColor = Color.FromArgb (5, 5, 5); 
     base.ForeColor = Color.FromArgb (0, 0, 0); 
    } 

Respuesta

4

El atributo [DefaultValue(...)] es una pista para los diseñadores y los generadores de código. NO es una instrucción para el compilador.

Más información en this KB article.

+0

Gracias, no lo sabía. Usé una combinación de establecer el valor dentro del constructor y el valor predeterminado, y ahora aparece correctamente. A excepción de Rojo, tiene que ser Rojo, si es 255, 0, 0, VS todavía piensa que es diferente a Rojo. –

+0

Funciona, pero si usa 255, 0, 0, VS cree que es diferente al rojo. Se muestra como Negrita. –

8

¿Qué tal simplemente establecer la variable de miembro privado con el color predeterminado que desea?

private Color lineColor = Color.Red; 

public Color LineColor 
{ 
     get { return lineColor; } 
     set { lineColor = value; Invalidate (); } 
} 

Si quieres que conserva , puedes sacar el acceso set.

Editar

veo, desea que la lista de propiedades en el diseñador para mostrar el color predeterminado.

Hay que reemplazar la propiedad BackColor del control de la base, añadir un nuevo DefaultValueAttribute para su nueva propiedad, a continuación, establecer realmente el color por defecto en el constructor o en el método InitializeComponent() (en los designer.cs archivo), que probablemente sea mejor ya que esto es para el diseñador.

public partial class RedBackgroundControl : UserControl 
{ 
    public RedBackgroundControl() 
    { 
     InitializeComponent(); 
     base.BackColor = Color.Red; 
    } 

    [DefaultValue(typeof(Color), "Red")] 
    new public Color BackColor 
    { 
     get 
     { 
      return base.BackColor; 
     } 
     set 
     { 
      base.BackColor = value; 
     } 
    } 
} 
+0

Gracias, cuando lo hice, el valor aún se muestra en negrita, como lo cambié de los valores predeterminados. También agregué el atributo DefaultValue pero eso no cambió nada. –

+0

También por preservado quise decir inicialmente. Después de eso, el usuario puede configurarlo para lo que quiera. –

16

El truco es usar el código hexadecimal del color de:

[DefaultValue(typeof(Color), "0xFF0000")] 
    public Color LineColor 
    { 
      get { return lineColor; } 
      set { lineColor = value; Invalidate (); } 
    } 

Creo que también se puede utilizar "255, 0, 0", pero no estoy seguro y normalmente utilizado cualquiera de los colores con nombre o el código hexadecimal

+0

Gracias, funciona para mí. – Pedro77

+0

Acabo de probar y puedo confirmar que tanto cadenas RGB como cadenas ARGB son válidas. Use '' 255, 0, 0 "' o '" 255, 255, 0, 0 "' para representar el rojo. –

-1

Hay bastante un artículo sobre la inicialización propiedad valor predeterminado en CodeProject

+0

Sin embargo, no cubre nada sobre los colores en particular. –

-1

En DependencyProperty utilizar un UIPropertyMetadata

como:

public static DependencyProperty TrueColorProperty = DependencyProperty.Register(
     "TrueColor", typeof (Color), typeof (LedControl), new UIPropertyMetadata(Colors.Red)); 
+0

La pregunta es sobre winforms no wpf –

0

no tenía ninguna suerte con el atributo DefaultValue con propiedades del tipo Color o del tipo Font, pero tuve éxito con estos métodos descritos en la documentación msdn:

"Definición de valores predeterminados con el ShouldSerialize y Reset" Métodos http://msdn.microsoft.com/en-us/library/53b8022e(v=vs.90).aspx

Solía ​​Color.Empty y null, respectivamente, como los valores de mis campos de respaldo privados y tenía las propiedades públicas siempre vuelven algo útil.

Cuestiones relacionadas