Frage

Wie kann ich die Sortierung der Kategorien in einem PropertyGrid anpassen?

Wenn ich gesetzt eine der folgenden ...

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

... dann werden die Kategorien alphabetisch geordnet. ( „Alphabetisch“ scheint auf die Eigenschaften innerhalb jeder Kategorie zu beantragen.) Wenn ich PropertySort.NoSort verwenden, ich Kategorisierung verlieren.

Ich bin bevölkern meine PropertyGrid mit SelectObject, die recht einfach:

this.propertyGrid1.SelectedObject = options;

options ist eine Instanz einer Klasse mit entsprechend eingerichteten Eigenschaften:

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

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

Ich habe ein paar Dutzend Objekte in einem halben Dutzend Kategorien.

Gibt es irgendeine Weise, die ich die Kategorie Sortierreihenfolge einstellen kann, während meine einfache Bedienung mit SelectedObject bewahren?

War es hilfreich?

Lösung

Wenn Sie meinen, dass Sie die Kategorien in einer bestimmten (nicht alphabetisch) Art und Weise sortiert werden sollen, dann nein - ich glaube nicht, dass Sie das tun können. Sie könnten versuchen wollen VisualHint - Ich erwarte, dass es dies tut haben (da kann man beschlagnahmen viel mehr Kontrolle).

Andere Tipps

Ich denke, diese Verbindung nützlich ist http://bytes.com/groups/ net-c / 214456-q-Ordering-Sortierung-Kategorie-text-Property

  

Ich glaube nicht, gibt es eine Möglichkeit, dies zu tun ist. Das einzige, was ich konnte,   finden, die angibt, was Sie tun dies ist der PropertySort könnten in der Lage sein,   Eigentum. Wenn Sie es auf none gesetzt, heißt es, dass die Eigenschaften angezeigt werden   in der Reihenfolge, dass sie von dem Typdeskriptor empfangen. Du könntest sein   der Lage, einen Proxy-Typdeskriptor zwischen Ihrem Objekt zu erstellen und die   Property, die dann nicht nur die Eigenschaften in der richtigen zurückkehren   Ordnung, aber die Eigenschaften mit den Kategorien in der Reihenfolge, die Sie wollen   sie in ...

Wie @Marc Gravel in seine Antwort , gibt es nichts, im Rahmen, die dieses Verhalten ermöglicht. Jede Lösung wird ein Hack. Nachdem dies gesagt wurde, können Sie die Lösung von @Shahab in seine Antwort als Behelfslösung aber das bedeutet nicht Ihren Wunsch, jede Aufrechterhaltung des Code wirklich. Also ich denke, das Beste, was Sie tun können, ist eine benutzerdefinierte Attribute erstellen, die von CategoryAttribute erbt den Prozess für Sie zu behandeln:

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))
    {
    }
}

Dann können Sie es als solche verwenden

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

So stellen Sie sicher, dass Sie die PropertyGrid der UseCompatibletextRendering Eigenschaft, die nicht druckbare Zeichen für Sie abzustreifen, um true und die PropertySort Categorized oder CategorizedAlphabetical gesetzt, und Sie sollten gut gehen.

Eine kleine Variante des ‚\ t‘ Trick oben beschrieben, ich habe gerade versuchte es mit Carriage Return-Zeichen ( ‚\ r‘) statt. Es scheint zu funktionieren und vermeidet das Tooltip Problem durch den zusätzlichen Platz durch eine Lasche eingeführt verursacht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top