2010-05-24 7 views
12

좋습니다. C#과 관련하여 제 용어는 좋지 않으므로 작은 예제로 설명하겠습니다. 당신은 당신이 PropertyGrid가 내에서 사용하는 클래스를 생성하고 다음과 같은 값이있는 경우 :PropertyGrid에서 서브 필드 구현하기

class Test 
{ 
    public Point example { get; set; } 
} 

이 확장 개체입니다를 만들기 위해 필드의 X와 Y를 가지고 "예"를 가진 PropertyGrid가 생성됩니다 "포인트".

나는 분야 "FIRSTNAME"와 "LASTNAME"을 가진 개체 "이름"을 만들려고 해요, 그래서 나는이 :

class Test 
{ 
    public Name example { get; set; } 
} 

public struct Name 
{ 
    public string firstname { get; set; } 
    public string lastname { get; set; } 
} 

이를하지만 의도 한대로 작동하지 않습니다.

제가이 문제를 해결하기 위해 어떤 방법을 오버라이드해야한다고 생각합니다.하지만 실제로 PropertyGrids에 대한 용어가 없기 때문에 해결책을 찾기가 어렵습니다.

도움이 될 것입니다.

답변

14

주위를 둘러 보면서 마침내 알아낼 수있었습니다. 누락 된 키워드는 "ExpandableObjectConverter"였습니다.

public Form1() 
{ 
    InitializeComponent(); 

    Person x = new Person(); 
    propertyGrid1.SelectedObject = x; 
} 

public class Person 
{ 
    public string Caption { get; set; } 

    [TypeConverter(typeof(ExpandableObjectConverter))] 
    public class Name 
    { 
     public string FirstName { get; set; } 
     public string LastName { get; set; } 

     public override string ToString() 
     { 
      return LastName + ", " + FirstName; 
     } 
    } 

    private Name _name = new Name(); 

    public Name testName 
    { 
     get { return _name; } 
    } 
} 

PropertyGrids 확실히 혼란 :

어쨌든, 여기에 예제 코드입니다.

+1

+1이고 질문에 대해서는 +1을 요구할 수도 있습니다. – ChrisBD

+0

해결해 주셔서 감사합니다. – tplaner

+0

[TypeConverter (typeof (ExpandableObjectConverter))] 데코레이션을 이용해 주셔서 감사합니다. 누락되었습니다. – Pisu

1

나는이 경우에 자동 Implimented 속성 정의

public string Name { get; set; } 

이 구조체 유형하지만 클래스 유형에 대해 작동하지 않습니다 믿습니다. 첫 번째 예에서는 Point이 클래스 유형입니다.

class Test 
{ 
    public Name example {get; set;} 
} 

이 작동

class Name 
{ 
    public string FirstName {get;set;} 
    public string LastName {get;set;} 
} 

을보십시오.

+0

그래,이 시도했지만 작동하지 않습니다. 필드는 실제로 회색으로 표시되어 뭔가를 재정의해야한다고 생각합니다. – tplaner

+0

흠 - 저에게 VS를주는 기계를 확인해야합니다. 생성자가 자신의 질문에 대답 할 때는 – ChrisBD

관련 문제