2009-11-04 6 views
0

기본 컨트롤 속성 목록에 내 사용자 컨트롤 중 하나의 속성을 추가하는 방법을 알고 싶습니다. 이것이 가능한가?C# 속성 컨트롤 기본 클래스 연결

So what I am doing is this: 

private static List<LabelType> ConvertControlCollectionToList(Control customContainer) 
    { 
     LabelTypeList.LabelProps.Clear(); 

     foreach (Control c in customContainer.Controls) 
     { 
      LabelTypeList.LabelProps.Add(new LabelType()); 
      LabelTypeList.LabelProps.Last().Name = c.Name; 
      LabelTypeList.LabelProps.Last().Top = c.Top; 
      LabelTypeList.LabelProps.Last().Left = c.Left; 
      LabelTypeList.LabelProps.Last().Height = c.Height; 
      LabelTypeList.LabelProps.Last().Width = c.Width; 
      LabelTypeList.LabelProps.Last().Font = c.Font; 
      LabelTypeList.LabelProps.Last().Text = c.Text; 
      LabelTypeList.LabelProps.Last().DataColumn = c.????? 
      LabelTypeList.LabelProps.Last().Rotation = c.????? 
     } 

     return LabelTypeList.LabelProps; 
    } 

내 UserControl을 사용자 지정되는 목록의 마지막에 두 가지 속성을 가지고 있지만 나는 형태로 다시를 DataColumn 및 회전 내 설정을 컬렉션을로드 할 때 나는 이렇게 기본 컨트롤 클래스에 추가 할 필요가 접근 가능하다. 말이 돼?

감사합니다.

+0

답변이 업데이트되었습니다. –

답변

2

는 말, 예를 들어, 제어 txtFirstName라는 TextBox 것을 당신은 당신의 UserControl에 그 TextBox의 텍스트를 나타내는 속성을 원하는 : 편집을 감안할 때

public string FirstName 
{ 
    get { return txtFirstName.Text; } 
    set { txtFirstName.Text = value; } 
} 

편집

질문, 아니, 당신은 당신이 요구하는 것을 정확하게 할 수 없습니다 (귀하의 재산을 기본 클래스의 재산에 추가하십시오). 그러나 특정 컨트롤이 UserControl의 인스턴스인지 확인하고 해당 컨트롤이있는 경우 해당 속성을 수집 할 수 있습니다. 이렇게하려면 다음을 사용 :

private static List<LabelType> ConvertControlCollectionToList(Control customContainer) 
{ 
    LabelTypeList.LabelProps.Clear(); 

    foreach (Control c in customContainer.Controls) 
    { 
     LabelType lt = new LabelType(); 

     LabelTypeList.LabelProps.Add(lt); 

     lt.Name = c.Name; 
     lt.Top = c.Top; 
     lt.Left = c.Left; 
     lt.Height = c.Height; 
     lt.Width = c.Width; 
     lt.Font = c.Font; 
     lt.Text = c.Text; 

     YourUserControlType uc = c as YourUserControlType; 

     if(uc != null) 
     { 
      lt.DataColumn = uc.DataColumn; 
      lt.Rotation = uc.Rotation; 
     } 
    } 

    return LabelTypeList.LabelProps; 
} 

은 (즉, LINQ 확장 방법이며 전체 목록은 속성을 설정 때마다 이송 될 원인이됩니다 나는 Last()에 전화를 제거).

+0

Downvoter는 이유에 대해 자세히 설명합니까? 이것은 정확히 그가 원하는 것 같습니다. –

+0

Adam, 대답은 YourUserControlType 형식 클래스 또는 실제 UserControl? 그것이 사용자 정의 컨트롤이라면 순환 참조를 발생시키지 않고 비즈니스 계층에서 어떻게 액세스 할 수 있습니까? – Nathan

+0

그것은 유형이므로,'Type'의 접미사입니다.) –

1

WPF에서는 Attached Properties을 사용하여이 동작을 제공 할 수 있습니다. 이것은 Grid.Row 같은 것들입니다.

Windows Forms에서는 Extender Provider을 사용하려고합니다.

두 옵션 모두 실제로 기본 클래스에 속성을 추가합니다. 하위 클래스의 기본 클래스 구조는 변경할 수 없습니다. 디자인 타임에 사용할 수있는 컨트롤을 사용할 수있는 속성을 추가합니다.

+0

내가 가진 인상은 그가 반대를하고 싶다는 것이 었습니다 : 부모 컨트롤에있는 자식 컨트롤의 속성을 노출합니다. –

+0

그가 100 % 확실하지는 않은지 확실하지 않습니다. 어쩌면 네이선은 더 자세한 정보를 얻을 수 있습니다. –

+0

위의 내 원본 게시물을 수정하면 더 명확 해집니다. – Nathan