Comment afficher des chaînes personnalisées lorsque plusieurs éléments sont sélectionnés?

StackOverflow https://stackoverflow.com/questions/634630

  •  10-07-2019
  •  | 
  •  

Question

J'ai une grille de propriétés qui m'aide à gérer tous les contrôles d'un formulaire. Ces commandes sont destinées aux utilisateurs de type concepteur. Je ne m'inquiète donc pas beaucoup de l'interface utilisateur ... jusqu'à ce que quelqu'un sélectionne plusieurs objets.

J'ai un UITypeEditor pour le paramètre "EffectiveDiameter". propriété sur ces objets communs. Il garde la trace des unités (mètres / pieds) et fait de belles choses à la volée. Cependant, lorsque quelqu'un sélectionne deux ou trois objets communs, EffectiveDiameter est vide, même s'il correspond à la même chaîne de texte.

Par exemple, dans la plupart des contrôles, Microsoft utilise le code "Ancre". propriété qui a une sortie texte de "Top, Right". Lorsque vous le tirez, c'est un objet avec un UITypeEditor sympa. Cependant, lorsque vous sélectionnez cinq objets sur votre formulaire qui ont tous le même paramètre d'ancrage, vous pouvez toujours voir la chaîne "Top, Right". dans la grille des propriétés.

/// <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 je sélectionne plusieurs de mes objets personnalisés (tous avec le même diamètre effectif), comment puis-je faire afficher EffectiveDiameter dans le PropertyGrid comme le fait Anchor? Pour le moment, ce champ est toujours vide.

Était-ce utile?

La solution

D'après votre description, il semble que vous parlez du diamètre effectif du type double. Mais dans votre exemple, vous montrez un UITypeEditor pour la classe umConversion. Alors, s'il vous plaît clarifier.

Si vous vous trouvez dans le deuxième cas, où votre propriété est en fait une classe de votre choix et non un type primitif, veillez à implémenter la méthode Equals. La classe MultiPropertyDescriptorGridEntry dans MS PropertyGrid appelle Equals pour savoir si toutes les instances cibles ont la même valeur. Pas sûr que ce soit votre problème, mais je voudrais tester cela pour éliminer cette possibilité.

Autres conseils

Placez également un attribut TypeConverter sur chaque propriété.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top