2010-07-15 5 views
1

사용자 지정 웹 컨트롤에서 일부 공용 속성을 동적으로 만드는 방법.동적으로 공용 속성 만들기

예를 들어 웹 컨트롤에는 5 개의 TextBox 컨트롤이 있습니다. TextBox 컨트롤의 특정 속성을 설정하려면 각 TextBox 컨트롤에 대한 공용 속성이 필요합니다.

나는 webcontrol에서 컨트롤을 반복하고 각 TextBox 컨트롤에 대한 공용 속성을 만들 수 있기를 원합니다.

어떤 아이디어가 있습니까?

+0

공개로 설정하면 페이지에서 액세스 할 수 있습니다. –

답변

1

편집 : 아이-컨트롤 다음 설명 할 필요가 디자인 타임에있는 경우

동적으로 제어 멤버에 액세스하는 속성을 추가 할 이유- 좋은 이유가없는 한 단지 가난한 디자인처럼 들린다.

여기 내 제안이다 :

  • Friend 또는 Private로 컨트롤을 남겨주세요 - (꽉 커플 링에 이르게하고 시간이 지남에 불쾌한 도착) 직접 노출시키지 마십시오.

  • 컨트롤의 1x에서 해당 속성을 가져 오거나 설정하는 새 public 속성을 노출합니다. 따라서 5x TextBox에 .Text을 설정하려면 5x 속성을 사용해야합니다.

  • 함께 해주십시오.

동적으로 추가하는 것이 현명하다면 좋지 않은 결과를 초래하는 것이 좋습니다. 그냥 기억하십시오 : KISS (간단하고 어리 석다!).

+0

디자인 타임에 제출하십시오. –

+0

그런 다음 속성을 동적으로 추가하는 이유 - 클래스에 관련 속성을 추가하기 만하면됩니다. 속성 setter에서 해당 컨트롤 값을 업데이트합니다. – STW

1

당신은 WebContol (또는 그 문제에 대한 모든 클래스)에 포함 된 컨트롤을 노출이

private TextBox[] textBoxes; //declared as a class member variable 

    public TextBox[] TextBoxes 
    { 
     get 
     { 
      if (textBoxes == null) 
      { 
       textBoxes =(from ctrl in this.Controls.OfType<Control>() 
          where ctrl is TextBox 
          select (TextBox)ctrl).ToArray(); 
      } 
      return textBoxes; 
     } 
    } 
+0

그래도 값을 설정할 수 있어야합니다. –

+0

이 메서드로 textBoxes 컬렉션을 설정하지 않는 한이 속성은 읽기 전용이지만 여전히 괜찮습니다. 당신은'myControl.TextBoxes [0] .Text = "Test";' –

+0

과 같은 일을 할 것입니다.하지만 그냥'Public'으로 컨트롤을 드러내는 것만은 아닙니다 ... 개인적으로 저는 * 노출 통제는 남용과 나쁜 사용을 위해 널리 열려 있습니다. – STW

0

같은 속성을 만들 그것은 당신의 코드가 취성 및 유지 보수가 어려운 만들면서 좋은 디자인되지 않습니다 수 있습니다. WebControl 안에 TextBox를 직접 조작하는 코드를 넣어야합니다.