Tengo el valor para mostrar correctamente con:

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

Pero después de volver a cargar el proyecto se utiliza el control, este valor se establece en Blanco, que puedo invocar Reset para volver de nuevo a Rojo, pero no entiendo el problema.

Cómo se supone para establecer el valor predeterminado y asegúrese de que es conservado a menos que me cambie el valor manualmente desde el predeterminado?

De hecho también estoy haciendo esto, que se establece de nuevo y ForeColor con estos valores y con el VS editor de propiedades muestra de ellos, como si cambia el valor predeterminado.

Es esto un error?

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

OriginalEl autor Joan Venge | 2009-10-05

7 Comentarios

  1. 4

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

    Más info en este artículo de KB.

    Gracias, no sabía que. He utilizado una combinación de la configuración del valor en el interior del constructor y el valor por defecto, y se muestra ahora correctamente. Excepto para el Rojo, tiene que ser de color Rojo, si es 255, 0, 0, VS aún piensa que es diferente de Rojo.
    Funciona, pero si se utiliza 255, 0, 0, VS piensa que es diferente de Rojo. Se muestra como Negrita.

    OriginalEl autor Serge Wautier

  2. 19

    El truco es usar el código Hexadecimal del color:

        [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 se utiliza tanto el nombre de los colores o el código hexadecimal.

    Gracias, a mí me funciona.
    Sólo he probado, y puedo confirmar que ambos RGB cadenas y ARGB de cadenas de caracteres son válidos. El uso de cualquiera de "255, 0, 0" o "255, 255, 0, 0" para representar rojo.

    OriginalEl autor JDunkerley

  3. 8

    ¿Qué acerca de la configuración de la variable miembro privada para el color por defecto que quieres?

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

    Si quieres que conservado, acaba de salir el descriptor de acceso set.

    Editar

    Veo, desea que la lista de propiedades en el diseñador para mostrar el color por defecto.

    Tiene que reemplazar la propiedad BackColor de la base de control, agregar un nuevo DefaultValueAttribute para su nueva de la propiedad y, a continuación, establecer el color por defecto en el constructor o en el al método InitializeComponent () (en el diseñador.cs archivo), que es probablemente la mejor, ya que este 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;
            }
        }
    }
    Gracias, cuando lo hice el valor todavía se muestra en NEGRITA, como he cambiado el valor predeterminado. También he añadido el atributo DefaultValue pero eso no cambia nada.
    También por conservado que me refería al principio. Después de que el usuario puede configurarlo para lo que quieran.

    OriginalEl autor scottm

  4. 0

    No tengo la suerte de usar el DefaultValue atributo con propiedades de tipo Color o de tipo Font, pero me hizo tener éxito con estos métodos se describen en la documentación de msdn:

    «La definición de Valores por Defecto con el ShouldSerialize y Métodos de restauración»
    http://msdn.microsoft.com/en-us/library/53b8022e(v=vs 90).aspx

    He utilizado Color.Empty y null, respectivamente, como los valores para mi privado campos de copia de seguridad y tenía las propiedades públicas siempre devolver algo útil.

    OriginalEl autor Kerran

  5. 0

    Puede establecer Atributo específico en el componente.el diseñador.cs en el Método Initializecomponent:

      private void InitializeComponent()
        {
            components = new System.ComponentModel.Container();
            this.LineColor= System.Drawing.Color.FromArgb(255, 0, 0);
        }

    A generar el proyecto y todo debería también se muestran en la

    OriginalEl autor Eych

  6. -1

    Hay un artículo acerca de la propiedad defaultvalue de inicialización en CodeProject

    Sin embargo, se cubre nada acerca de los colores en particular.

    OriginalEl autor marchewek

  7. -1

    En DependencyProperty utilizar un UIPropertyMetadata

    como:

    public static DependencyProperty TrueColorProperty = DependencyProperty.Register(
            "TrueColor", typeof (Color), typeof (LedControl), new UIPropertyMetadata(Colors.Red));
    La pregunta es acerca de winforms no wpf

    OriginalEl autor Michal Plško

Dejar respuesta

Please enter your comment!
Please enter your name here