Question

Comment personnaliser le tri des catégories dans un PropertyGrid ?

Si je définis l'un des éléments suivants ...

propertyGrid.PropertySort = PropertySort.Categorized;
propertyGrid.PropertySort = PropertySort.CategorizedAlphabetical;

... alors les catégories seront classées par ordre alphabétique. ("Alphabetical" semble s'appliquer aux propriétés de chaque catégorie.) Si j'utilise PropertySort.NoSort , je perds la catégorisation.

Je renseigne mon PropertyGrid avec SelectObject , ce qui est assez simple:

this.propertyGrid1.SelectedObject = options;

options est une instance d'une classe avec des propriétés convenablement décorées:

    [CategoryAttribute("Category Title"),
    DisplayName("Property Name"),
    Browsable(true),
    ReadOnly(false),
    BindableAttribute(true),
    DesignOnly(false),
    DescriptionAttribute("...")]
    public bool PropertyName {
        get {
            // ...
        }

        set {
            // ...
            this.OnPropertyChanged("PropertyName");
        }
    }

J'ai quelques dizaines de propriétés dans une demi-douzaine de catégories.

Existe-t-il un moyen de modifier l'ordre de tri des catégories tout en préservant ma facilité d'utilisation avec SelectedObject ?

Était-ce utile?

La solution

Si vous voulez dire que vous voulez que les catégories soient triées d’une manière spécifique (non alphabétique), alors non - je ne pense pas que vous puissiez le faire. Vous voudrez peut-être essayer VisualHint - je suppose qu'il en est ainsi (car vous saisir beaucoup plus de contrôle).

Autres conseils

Je pense que ce lien est utile http://bytes.com/groups/ net-c / 214456-q-ordering-sorting-category-text-propertygrid

  

Je ne crois pas qu'il y ait un moyen de faire cela. La seule chose que je pouvais   trouver qui indique que vous pourriez être en mesure de faire cela est le PropertySort   propriété. Si vous le définissez sur none, cela signifie que les propriétés sont affichées.   dans l'ordre dans lequel ils sont reçus à partir du descripteur de type. Tu pourrais être   capable de créer un descripteur de type proxy entre votre objet et le   propertygrid, qui renverrait alors non seulement les propriétés dans le bon   ordre, mais les propriétés avec les catégories dans l'ordre que vous voulez   les dans ...

Comme @Marc Gravel l’a dit dans sa réponse , rien dans la structure ne permet ce comportement. Toute solution sera un hack. Ceci dit, vous pouvez utiliser la solution suggérée par @Shahab dans sa réponse comme solution de contournement, mais cela ne fonctionne pas. vraiment indiquer votre intention à quiconque maintient votre code. Donc, je pense que le mieux que vous puissiez faire est de créer un attribut personnalisé qui hérite de CategoryAttribute pour gérer le processus pour vous:

public class CustomSortedCategoryAttribute : CategoryAttribute
{
    private const char NonPrintableChar = '\t';

    public CustomSortedCategoryAttribute(   string category,
                                            ushort categoryPos,
                                            ushort totalCategories)
        : base(category.PadLeft(category.Length + (totalCategories - categoryPos),
                    CustomSortedCategoryAttribute.NonPrintableChar))
    {
    }
}

Ensuite, vous pouvez l'utiliser comme tel

[CustomSortedCategory("Z Category",1,2)]
public string ZProperty {set;get;}
[CustomSortedCategory("A Category",2,2)]
public string AProperty {set;get;}

Assurez-vous simplement que vous définissez la propriété UseCompatibletextRendering de PropertyGrid sur true afin de supprimer les caractères non imprimables pour vous et le caractère < code> PropertySort défini sur Categorized ou CategorizedAlphabetical et vous devriez être prêt à partir.

Une petite variante de l'astuce '\ t' décrite ci-dessus, je l'ai simplement essayée avec des caractères de retour chariot ('\ r'). Cela semble fonctionner et évite le problème des info-bulles causé par l'espace supplémentaire introduit par un onglet.

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