임의 객체의 속성을 편집 할 수있는 GUI 응용 프로그램을 작성하고 있습니다 (런타임에 해당 유형 만 알려짐).PropertyGrid 및 동적 객체 유형
이 기능을 사용하려면 PropertyGrid 컨트롤을 사용하기로 결정했습니다. 내가 편집해야하는 개체의 인스턴스를 얻을 때, 나는 그것을 위해 래퍼를 작성하고 선택한 개체로 설정
[TypeConverter(typeof(ExpandableObjectConverter))]
[DefaultPropertyAttribute("Value")]
public class Wrapper
{
public Wrapper(object val)
{
m_Value = val;
}
private object m_Value;
[NotifyParentPropertyAttribute(true)]
[TypeConverter(typeof(ExpandableObjectConverter))]
public object Value
{
get { return m_Value; }
set { m_Value = value; }
}
}
:
Wrapper wrap = new Wrapper(obj);
propertyGrid.SelectedObject = wrap;
하지만 나는 다음과 같은 클래스를 생성 '다음과 같은 문제가 발생합니다. obj 형식이 일부 사용자 지정 형식 (즉, 직접 정의한 클래스 또는 복잡한 형식으로 작성된 클래스) 인 경우에만 obj가 프리미티브 인 경우에만 위의 예상대로 작동합니다.
[TypeConverter(typeof(ExpandableObjectConverter))]
public class SomeClass
{
public SomeClass()
{
a = 1;
b = 2;
}
public SomeClass(int a, int b)
{
this.a = a;
this.b = b;
}
private int a;
[NotifyParentPropertyAttribute(true)]
public int A
{
get { return a; }
set { a = value; }
}
private int b;
[NotifyParentPropertyAttribute(true)]
public int B
{
get { return b; }
set { b = value; }
}
}
을 그리고 수행합니다 : 예를 들어
, 나는 정의하면
Wrapper wrap = new Wrapper(new SomeClass());
propertyGrid.SelectedObject = wrap;
그런 다음 모든 작업이 팽창.
int num = 1;
Wrapper wrap = new Wrapper(num);
propertyGrid.SelectedObject = wrap;
가 그럼 난 그리드의 값을 "1"로 볼 수있다 (그리고 grayscaled 아니에요)하지만 난 값을 편집 할 수 없습니다 : 반면에, 때 나는 다음과 같은 수행합니다. Wrapper의 "Value"속성 유형을 int로 변경하고 TypeConverter 특성을 제거하면 작동하는 것으로 나타났습니다. 다른 기본 유형 및 문자열에 대해 동일한 동작이 발생합니다.
무엇이 문제입니까?
미리 감사드립니다.
고마워, 그 속임수를 했어! :) – Marina
왜이 줄은'parentConverter.GetProperties (context.Instance);'null을 반환합니까? –