2010-02-01 1 views
1

Visual Studio의 디자이너에서 속성 표를 사용하려고합니다.C# 클래스 목록의 속성

사용자가 추가 기능에 액세스 할 수 있도록 개발자가 디자인 타임에 추가 할 수 있도록하려는 클래스 목록이 있습니다.

다음은 코드에 이미있는 코드의 예입니다. 문제는 개발자가 디자인 모드로 이동하여 목록에 x 개의 값이 있음을 알 수 있지만 세부 정보를 볼 수없는 경우입니다. 새 항목을 목록에 추가하려고하면 사용자에게 오류가 표시됩니다.

'EditorTextBox + SyntaxRegex'유형의 생성자를 찾을 수 없습니다.

이제 코드 : 당신은 형 컨버터/편집기를 추가 할 필요가

private List<SyntaxRegex> _syntaxRegexList = new List<SyntaxRegex>(); 
public class SyntaxRegex 
{ 
    public string title; 
    public string regex; 
    public Color color; 
} 
Public List<SyntaxRegex> SyntaxRegexList 
{ 
    get{_syntaxRegexList = value;} 
    set{return _regexList;} 
} 

답변

3

; 각 class 정의 위

[TypeConverter(typeof(ExpandableObjectConverter))] 

: 좋은 시작을 추가하는 것입니다.

[TypeConverter(typeof(ExpandableObjectConverter))] 
class Foo { 
    private List<SyntaxRegex> _syntaxRegexList = new List<SyntaxRegex>(); 
    [TypeConverter(typeof(ExpandableObjectConverter))] 
    public class SyntaxRegex 
    { 
     public override string ToString() { 
      return string.IsNullOrEmpty(Title) ? "(no title)" : Title; 
     } 
     public string Title { get; set; } 
     public string Regex { get; set; } 
     public Color Color { get; set; } 
    } 
    [DisplayName("Patterns")] 
    public List<SyntaxRegex> SyntaxRegexList 
    { 
     get { return _syntaxRegexList; } 
    } 
    [STAThread] 
    static void Main() 
    { 
     Application.EnableVisualStyles(); 
     Application.Run(new Form 
     { 
      Controls = 
      { 
       new PropertyGrid { 
        Dock = DockStyle.Fill, 
        SelectedObject = new Foo() 
       } 
      } 
     }); 
    } 
} 

특정 오류 메시지가 또한 실제 유형은 공공 매개 변수가없는 생성자 공공 경우 궁금한데 예를 들어, 다음은 잘 작동 (I는, 속성 변경 목록 세터 등을 제거 주) (사실 컴파일하지 않으면 실제 코드를 게시하지 않은 것으로 의심됩니다 ...)

+0

필자는 공간 코드를 줄였습니다. 형식 변환기를 추가하면 효과적입니다. –

+0

@Joshua - 공간 축소는 괜찮지 만 단축 된 버전은 이상적으로 여전히 컴파일러 (*) 여야하며 문제를 입증해야합니다. * = 컴파일을 방해하는 구문 문제에 대해 질문하는 경우가 아니면. –