Pregunta

Tengo una cuadrícula de propiedades que me ayuda a administrar todos los controles de un formulario. Estos controles son para personas de tipo diseñador, por lo que no estoy realmente preocupado por la interfaz de usuario ... hasta que alguien seleccione varios objetos.

Tengo un UITypeEditor para el " EffectiveDiameter " propiedad en estos objetos comunes. Realiza un seguimiento de las unidades (metros frente a pies) y hace algunas cosas buenas sobre la marcha. Sin embargo, cuando alguien selecciona dos o tres objetos comunes, EffectiveDiameter está en blanco, aunque se evalúa como la misma cadena de texto.

Por ejemplo, en la mayoría de los controles, Microsoft tiene el "Ancla" propiedad que tiene una salida de texto de "Arriba, derecha". Cuando lo tira hacia abajo, es un objeto con un agradable UITypeEditor. Sin embargo, cuando selecciona cinco objetos en su formulario que tienen la misma configuración de Anclaje, aún puede ver la cadena "Arriba, Derecha". en la cuadrícula de propiedades.

/// <summary>
/// The default containing class for all Unit-Management Conversion classes.
/// </summary>
[
 Serializable,
 EditorAttribute(typeof(umConversionTypeEditor), typeof(UITypeEditor)),
 TypeConverter(typeof(umConversionTypeConverter)),
]
public class umConversion
{
    ...
}


public class umConversionTypeEditor : UITypeEditor
{
    ...
}



// Now, in my designer class, I have ...
private double _effectiveDiameter { get; set; }

[DisplayName("Effective Diameter")]
public virtual umConversion EffectiveDiameter
{
    get
    {
            umConversion ret = new umConversion (_effectiveDiameter);
            ret.MeasureInSI = _si;
            return ret;
        }
        set
        {
           _effectiveDiameter = value.ImperialUnits;
        }
    }
}

Si selecciono varios de mis objetos personalizados, todos con el mismo diámetro efectivo, ¿cómo hago para que EffectiveDiameter se muestre en PropertyGrid como lo hace Anchor? En este momento, ese campo siempre está en blanco.

¿Fue útil?

Solución

Según su descripción, parece que está hablando del Diámetro efectivo de tipo double. Pero en su muestra está mostrando un UITypeEditor para la clase umConversion. Entonces, por favor aclare.

Si se encuentra en el segundo caso, donde su propiedad es en realidad una clase propia y no un tipo primitivo, asegúrese de implementar el método Equals. La clase MultiPropertyDescriptorGridEntry en MS PropertyGrid llama a Equals para saber si todas las instancias de destino tienen el mismo valor. No estoy seguro si este es su problema, pero lo probaría para eliminar esta posibilidad.

Otros consejos

Coloque también un atributo TypeConverter en cada propiedad ..

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