2010-07-23 6 views

답변

2

UserControl이를 다시 사용할 수 있어야하므로 제대로 이렇게하려면, 즉에 페이지 고리가있는 UserControl에서 이벤트를 사용해야합니다

public NewTextEventArgs : EventArgs 
{ 
    public NewTextEventArgs(string newText) 
    { 
     _newText = newText; 
    } 

    public NewText 
    { 
     get { return _newText; } 
    } 
} 

이 그런 다음 UserControl을에 다음과 같은 이벤트를 추가 :

private void NotifyNewText(string newText) 
{ 
    if (NewText != null) 
    { 
     NewText(this, new NewTextEventArgs(newText)); 
    } 
} 

그런 나타나서 그런 다음

public event OnNewText NewText; 
public delegate void OnNewText(object sender, NewTextEventArgs e); 

사용자 컨트롤에서 이벤트를 발사 t 귀하의 페이지에서 해당 이벤트를 소비하고있는 UserControl 및 페이지는 더 이상 밀접하게 결합되지 않은 :

그런 다음 이벤트를 처리하고 라벨에 텍스트를 설정합니다

protected void YourControl1_NewText(object sender, NewTextEventArgs e) 
{ 
    Label1.Text = e.NewText; 
} 
+0

@ Nathan Taylor - 초기 답변을 제거하고 더 나은 이벤트 중심 답변으로 교체했습니다. – GenericTypeTea

+0

좋은 물건! 일반 EventHandler 과 함께 간단한 팁만 있으면 더 이상 사용자 정의 eventargs 클래스에 대한 대리인을 만들 필요가 없습니다. 당신은 간단하게'public 이벤트 EventHandler NotifyNewText;'를 할 수 있습니다. –

+0

@Nathan - 고마워요. 나는 그것을 몰랐다! – GenericTypeTea

2

가장 좋은 방법은이다 일종의 이벤트를 사용하여 포함 된 페이지에 UserControl이 업데이트되었음을 ​​알립니다.

public class MyControl : UserControl { 
    public event EventHandler SomethingHappened; 

    private void SomeFunc() { 
     if(x == y) { 
      //.... 

      if(SomethingHappened != null) 
       SomethingHappened(this, EventArgs.Empty); 
     } 
    } 
} 

public class MyPage : Page { 

    protected void Page_Init(object sender, EventArgs e) { 
     myUserControl.SomethingHappened += myUserControl_SomethingHappened; 
    } 

    private void myUserControl_SomethingHappened(object sender, EventArgs e) { 
     // it's Business Time 
    } 
} 

이 그냥 기본적인 예제이지만, 개인적으로 할당이 아니라 하나보다 당신이 노력하고 코드 뒤에 디자이너에서 처리 가도록 (듯이), I는 사용자 컨트롤의 이벤트 핸들러를 지정하는 디자이너 인터페이스를 사용하는 것이 좋습니다 in.

+0

나는 그렇게 생각했지만, 내 페이지에서이 사건을 어떻게 잡을 수 있습니까? – Tony

0

당신은 UserControl을의 포함 된 페이지에 액세스 페이지 속성을 사용할 수 있습니다. 시도 :

((Page1) this.Page) .Label1.Text = "Label1 Text";

관련 문제