2012-04-22 2 views
1

PropertyGrid에서 사용자 정의 동적 클래스 객체를 사용하고 있습니다 (여기에 게시 할 코드가 너무 많음). 간단히 말해서, 임의의 입력 (이 경우 XML이지만 점 옆에 있음)에서 런타임에 속성을 만들 수 있습니다. 이러한 속성은 다른 사용자 정의 클래스를 포함하여 모든 유형이 될 수 있으므로 무한정 중첩 될 수 있습니다.CollectionEditor를 완전히 비활성화하십시오.

내가 겪고있는 문제는 PropertyGrid가이 클래스를 Collection으로보고 CollectionEditor를 열 수있는 Value 열의 버튼이 있다는 것입니다. 여기에는 (다른 것들 중에서도) Add 및 Remove 버튼이 있으며, 둘 다 기본적으로 사용자 정의 클래스를 중단합니다. 이 두 가지 복잡한 시스템을 멋지게 함께 사용하기보다는 CollectionEditor를 단순히 비활성화하면됩니다. 나는 (PropertyGrid.SelectedObject를 자식 객체로 설정하여) 클래스의 자식 객체를 볼 수있는 또 다른 시스템을 가지고있다. 나는이 시스템과 전혀 호환되지 않는 것처럼 보이기 때문에 사용자가 CollectionEditor를 볼 수있는 옵션을 가지고 있지 않은 것을 선호한다.

이상적으로, 나는 단지 클릭 이벤트를 캡처하고 자신을 처리 할 수있는 버튼을 값 열에 넣는 것이 좋지만 선택 사항입니다. 나는 문제의 행이나 전체 PropertyGrid에 대해 CollectionEditor를 비활성화해도 상관하지 않습니다. 나는 그것을 어느쪽으로도 사용하지 않으므로 단지 접근하기 어렵게 만드는 것이 좋을 것이다.

답변

1

자신 만의 CollectionEditor를 파생 시켰는지, 거기에 양식/이벤트를 오버라이드하여 양식이 나타나지 않고 아무것도하지 않고 돌아 왔습니까?

당신은 다음과 컬렉션 유형의 속성을 표시해야합니다

[EditorAttribute(typeof(MyCollectionEditor), typeof(System.Drawing.Design.UITypeEditor))] 

이 자동으로 MyCollectionEditor가 시작됩니다 PropertyGrid가에 표시된 컬렉션 속성의 "..."버튼을 클릭합니다.

또한 PropertyDescriptor를 상속하고 GetEditor 메서드를 재정 의하여 자신의 CollectionEditor를 반환해야 할 수도 있습니다.

+0

어떻게 작동하는지 잘 모르겠습니다. 저는 CollectionEditor의 외관을 담당하지 않습니다. 그것은 내 코드 어디에서나 참조되지 않습니다. (그렇다면이 문제가 발생하지 않을 것입니다. 전혀 표시하지 않을 것입니다.) PropertyGrid의 기본 비헤이비어를 납치하여 내장 된 CollectionEditor 대신 내 CollectionEditor를 사용하려면 어떻게해야합니까? –

+0

System.ComponentModel.Design.CollectionEditor에서 자신의 "MyCollectionEditor"를 상속하고 컬렉션 유형 속성을 [EditorAttribute (typeof (MyCollectionEditor), typeof (System.Drawing.Design.UITypeEditor))]로 표시합니다. – Peladao

+0

흠 - 갈 방향. 그러나이 클래스가 런타임에 동적으로 작성된다는 사실은 모든 것을 복잡하게합니다. 특성을 갖지 않기 때문에 특성에 특성을 넣을 수 없습니다. PropertyDescriptors의 전체 복잡한 네스트를 사용하고 GetProperties()를 재정 의하여 고유 한 목록을 제공하므로 그렇게 간단한 데코레이터 태그를 추가하는 것만 큼 간단하지 않습니다. 어쨌든, 다시 한 번 작업을 시작하기까지 또 한 주 정도 걸릴 것입니다. 이제는 프로젝트의 다른 부분에 있습니다. 그 일이 어떻게 진행되는지 알려 드리겠습니다. –

관련 문제