2008-10-03 3 views
2

속성 표를 사용하여 이름/값 쌍을 편집하는 응용 프로그램에서 작업하고 있습니다. 내 클래스 파일의 일부 속성은 ListDictionary 컬렉션입니다. 런타임에 콜렉션 편집기를 작동하게 할 속성 선언에 적용 할 수있는 편집기 속성이 있습니까? 그렇지 않은 경우 ComponentModel.Design.CollectionEditor에서 상속하여 런타임에 사용할 수 있습니까? 추가 할 수 있어야합니다. 컬렉션 값을 삭제하고 편집하십시오. 덕분에 많이, 테리런타임시 컬렉션 편집기

답변

3

CodeProject의 기사에서 [http://www.codeproject.com/KB/cs/dzcollectioneditor.aspx][1]

는 컬렉션이 될하기 위해 충족해야합니다 세 가지 요구 사항이 있습니다 은 (는) 컬렉션과 함께 유지되었습니다. 편집자 :

  1. 먼저 컬렉션에 IList 인터페이스 ( 에서 상속하는 경우 System.Collections.CollectionBase는 대부분의 경우 가장 좋은 옵션 인 )을 구현해야합니다.
  2. 두 번째로 인덱서 (VB.NET의 항목) 속성이 있어야합니다. 유형 인 CollectionEditor는 이 컬렉션에 추가 할 인스턴스의 기본 유형을 결정하기 위해이 속성을 사용합니다. .

    보호 가상 유형 GetItemType (IList에의 콜) { PropertyInfo 파이 = coll.GetType() GetProperty를 : 더 나은이 작동 방식을 이해하려면

    는 GetItemType()는 CustomCollectionEditorForm의 기능을 살펴 ("Item", 새로운 유형 [] {typeof (int)});

  3. 셋째} pi.PropertyType 을 반환 , 컬렉션 클래스는 다음 방법 중 하나 또는 둘 모두를 구현해야합니다 추가 AddRange. 은 IList 인터페이스가 추가 회원을 가지고 있으며, CollectionBase에은 IList를 구현하지만 CollectionBase에 IList의의 추가 부재의 명시 적 멤버 구현을 선언, 당신은 여전히 주어진 컬렉션에 대한 추가 방법 를 구현해야합니다. 디자이너가 구현 한 메서드에 따라 컬렉션을 serialize합니다. 둘 모두를 구현 한 경우 AddRange는 이 좋습니다. 당신이 속성 그리드에 컬렉션을 구현하는 데 필요한 모든 것을 찾을 수 있습니다이 문서에서