2012-02-21 1 views
2

이 메서드를 ItemType의 하위 클래스 인스턴스에서 DataObject.GetData(typeof(ItemType))이라고 부르는 경우이 메서드는 null을 반환합니다 ... 하위 형식에서 데이터를 가져올 수 있습니까? 감사합니다.DataObject.GetDisapresent with subclass

답변

6

DataObject 처리는 클래스 계층을 처리하지 않습니다. 주어진 데이터 유형의 전체 이름에서 파생 된 직선 문자열 '유형'이므로 하위 클래스에 대한 지식을 제공하는 컨텍스트가 없습니다. 나는 방금 트리 뷰에서 드래그 앤 드롭을 구현하는 것과 똑같은 문제에 부딪혔다.

두 가지 옵션이 있습니다 (드래그 앤 드롭에만 해당됩니다. 문제가 아니라면 사용하지 않을 수도 있음). 두 가지 모두 데이터 객체의 소스 변경에 의존합니다. 그것에 접근 할 필요가 없다면별로 쓸모가 없을 것입니다.)

  1. ItemType 인스턴스를 취하는 래퍼 클래스를 생성하고 DoDragDrop를 호출 할 때, 실제 인스턴스 대신에 래퍼를 전달합니다. 반면에 DataObject.GetData(typeof(WrapperClass))을 대신 테스트하십시오.

  2. 다시 데이터 개체가 설정되는 곳에서 직접 DataObject 인스턴스를 설정하십시오. 전화

    ctl.DoDragDrop(new DataObject(typeof(ItemType).FullName, itemTypeInstance), 
        DragDropEffects.Move|DragDropEffects.Copy) 
    

    다른쪽에는 DataObject.GetData(typeof(ItemType))을 사용할 수 있습니다.

+0

고맙습니다. 너무 우아하고 간단합니다.이 문제는 드래그 드롭 작업도 발생했습니다. 하위 클래스를 사용하여 이러한 작업을 수행하는 데 큰 부족이 있다고 생각하기는 어렵습니다./ –

+0

+1. 좋은 해결책 – SRKX