2009-07-02 4 views
1

내 MasterPage에 단추가 있고 ContentPage에서 단추의 Click 이벤트를 처리하기를 원합니다. 여기까지 내가 무엇을 가지고 :ContentPage에서 MasterPage 이벤트 처리

//Event in MasterPage 
public event EventHandler Search_Submit; 

//ButtonClick event in MasterPage 
protected void SearchButton_Click(object sender, EventArgs e) 
    { 
     if (Search_Submit != null) 
     {    
      Search_Submit(this, EventArgs.Empty); 
     } 
    } 


//EventHandler in Page_Init on ContentPage 
Master.Search_Submit += new EventHandler(Master_Search_Submit); 

//Search_Submit event in ContentPage 
private void Master_Search_Submit(object sender, EventArgs e) 
    { 
     //Perform appropriate action... 
    } 

이 모든 작동 - 그러나, 나는 EventArgs 값을 전달하고 싶습니다. EventArgs에서 상속 받고 사용자 정의 속성이있는 사용자 지정 EventArgs 클래스를 만들어야한다고 생각합니다. 그러나, 내가 할 때 내 다음 오류가 발생합니다 : 'Master_Search_Submit'에 대한 오버로드가 'System.EventHandler'대리자와 일치하지 않습니다.

답변

2

EventHandler 대리자를 사용하도록 이벤트를 정의했습니다. 델리게이트는 함수에 대한 포인터이며, 응답 메소드가 가져야하는 서명을 정의합니다. 이벤트 핸들러 대리인의 서명은 다음과 같습니다

delegate void EventHandler(object sender, EventArgs e); 

.NET 2.0 당신이 EventArgs입니다 당신이 사용하고자하는 입력 지정할 수있는 일반적인 이벤트 핸들러 위임이있다.

void Master_Search_Submit(object sender, MyEventArgs e) 
+0

언급 한 것처럼 이벤트 선언을 변경하고 내 이벤트 처리기를 사용자 정의 EventArgs 클래스를 사용하도록 변경했습니다. 그러나 나는 여전히 Page_Init 클래스 (코드에 대한 원래 게시물 참조)의 줄에 같은 오류가 표시됩니다. –

+0

해당 줄을 Master.Search_Submit + = new EventHandler (Master_Search_Submit)로 변경했습니다. 그리고 제대로 작동했습니다. 감사!! –

1

어느 쪽이든 당신이 아니라 당신의 인수를 전달해야합니다 :

public event EventHandler<MyEventArgs> Search_Submit; 

이제이 될 것입니다 귀하의 경우에는 서명

void EventArgs<TArgs>(object sender, TArgs e) where TArgs: EventArgs 

에 이벤트 핸들러를 사용할 수 있습니다 EventArgs를 가져 와서 처리기에서 전송합니다.

private void Master_Search_Submit(object sender, EventArgs e) 
{ 

    MyEventArgs mea = (MyEventArgs)e; 
    //Perform appropriate action... 
} 

또는 당신은 당신의 사용자 정의 이벤트 인수 클래스를 기대하고 대리인을 정의해야합니다 :

public delegate void MyEventHandler(object sender, MyEventArgs mae); 
public event MyEvent myEvent 

myEvent += new MyEventHandler(Master_Search_Submit); 
0

당신은 대신에 이벤트 핸들러 위임의 CommandEventHandler를 사용할 수 있습니다.