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
?
해결책
카테고리를 구체적으로 (alphabetical) 방식으로 정렬한다는 것을 의미한다면 아니요. 시도하고 싶을 수도 있습니다 VisualHint - 나는 이것에 더 많은 제어를 포착 할 수 있기 때문에 이것을 기대합니다.
다른 팁
이 링크가 유용하다고 생각합니다http://bytes.com/groups/net-c/214456-q-ordering-sorting-category-text-propertygrid
나는 이것을 할 방법이 있다고 생각하지 않습니다. 내가 찾을 수있는 유일한 것은 당신이 이것을 할 수 있음을 나타내는 유일한 것은 속성 소송 속성입니다. 당신이 그것을 없음으로 설정하면, 속성은 유형 설명자로부터 수신 된 순서대로 표시됩니다. 객체와 PropertyGrid 사이에 프록시 유형 디스크립터를 생성 할 수 있으며, 그러면 올바른 순서로 속성을 반환 할뿐만 아니라 원하는 순서로 범주가있는 속성을 반환 할 수 있습니다.
@marc 자갈이 말했다 그의 대답, 프레임 워크에는이 동작을 허용하는 것이 없습니다. 모든 솔루션은 해킹이됩니다. 그 말로 @shahab이 제안한 솔루션을 사용할 수 있습니다. 그의 대답 해결 방법이지만 실제로 코드를 유지하는 사람에게는 귀하의 의도를 나타내는 것은 아닙니다. 그래서 당신이 할 수있는 최선은 관습을 만드는 것입니다. 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')로 시도했습니다. 작동하는 것으로 보이며 탭에서 도입 한 추가 공간으로 인한 툴팁 문제를 피합니다.