كيف يمكنني تخصيص فرز الفئة على propertygrid؟
-
05-07-2019 - |
سؤال
كيف يمكنني تخصيص فرز الفئات في أ 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;}
فقط تأكد من تعيين ملف PropertyGrid
'س UseCompatibletextRendering
خاصية ل true
لتجريد الشخصيات غير القابلة للطباعة لك ولل PropertySort
ضبط ل Categorized
أو CategorizedAlphabetical
ويجب أن تكون على ما يرام.
اختلاف صغير في خدعة " t" الموضحة أعلاه ، لقد جربتها للتو مع أحرف إرجاع النقل (' r') بدلاً من ذلك. يبدو أنه يعمل ويتجنب مشكلة تلميح الأدوات الناجم عن المساحة الإضافية التي أدخلتها علامة تبويب.