سؤال

كيف يمكنني تخصيص فرز الفئات في أ PropertyGrid?

إذا قمت بتعيين أي مما يلي ...

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

... ثم سيتم تبني الفئات الأبجدية. (يبدو أن "الأبجدية" تنطبق على الخصائص داخل كل فئة.) إذا كنت أستخدم PropertySort.NoSort, ، أفقد التصنيف.

أنا أتعامل مع بلدي PropertyGrid مع SelectObject, ، وهو أمر سهل للغاية:

this.propertyGrid1.SelectedObject = options;

options هو مثال على فئة ذات خصائص مزينة بشكل مناسب:

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

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

لديّ بضع عشرات من العقارات في نصف دزينة من الفئات.

هل هناك طريقة يمكنني من خلالها ضبط ترتيب فرز الفئة مع الحفاظ على سهولة الاستخدام مع SelectedObject?

هل كانت مفيدة؟

المحلول

إذا كنت تقصد أنك تريد أن يتم فرز الفئات بطريقة محددة (غير فنية) ، فلا - لا أعتقد أنه يمكنك القيام بذلك. قد ترغب في المحاولة VisualHint - أتوقع أن يكون لديه هذا (حيث يمكنك الاستيلاء على مزيد من التحكم).

نصائح أخرى

أعتقد أن هذا الرابط مفيدhttp://bytes.com/groups/net-c/214456-q-dording-sorting-category-text-propertygrid

لا أعتقد أن هناك طريقة للقيام بذلك. الشيء الوحيد الذي يمكن أن أجده يشير إلى أنك قد تكون قادرًا على القيام بذلك هو خاصية PropertySort. إذا قمت بتعيينها على أي شيء ، فهي تقول أن الخصائص يتم عرضها بالترتيب الذي يتم استلامه من واصف النوع. قد تكون قادرًا على إنشاء واصف نوع الوكيل بين كائنك و PropertyGrid ، والذي سيعيد بعد ذلك فقط الخصائص بالترتيب الصحيح ، ولكن الخصائص مع الفئات بالترتيب الذي تريدها في ...

كما قال marc gravel في إجابته, ، لا يوجد شيء في الإطار يسمح لهذا السلوك. أي حل سيكون اختراق. مع ذلك ، يمكنك استخدام الحل الذي اقترحه @Shahab In إجابته باعتباره عملًا عملًا ولكن هذا لا يشير حقًا إلى نيتك لأي شخص يحافظ على الكود الخاص بك. لذلك أعتقد أن أفضل ما يمكنك فعله هو إنشاء مخصص Attribute الذي يرث من CategoryAttribute للتعامل مع العملية لك:

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

ثم يمكنك استخدامه على هذا النحو

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

فقط تأكد من تعيين ملف PropertyGridUseCompatibletextRendering خاصية ل true لتجريد الشخصيات غير القابلة للطباعة لك ولل PropertySort ضبط ل Categorized أو CategorizedAlphabetical ويجب أن تكون على ما يرام.

اختلاف صغير في خدعة " t" الموضحة أعلاه ، لقد جربتها للتو مع أحرف إرجاع النقل (' r') بدلاً من ذلك. يبدو أنه يعمل ويتجنب مشكلة تلميح الأدوات الناجم عن المساحة الإضافية التي أدخلتها علامة تبويب.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top