PropertyGrid에서 카테고리 정렬을 사용자 정의하려면 어떻게해야합니까?

StackOverflow https://stackoverflow.com/questions/823327

  •  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')로 시도했습니다. 작동하는 것으로 보이며 탭에서 도입 한 추가 공간으로 인한 툴팁 문제를 피합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top