.NET 이벤트-개체 발신자 및 EventArgs e 란 무엇입니까?


78

sender 및 eventArgs는 무엇을 의미 / 참조합니까? 그것들을 어떻게 사용할 수 있습니까 (아래 시나리오의 경우)?

대본:

삭제 기능이있는 사용자 지정 컨트롤을 만들려고하는데 동일한 사용자 지정 컨트롤이 많이 포함 된 페이지에서 클릭 한 컨트롤을 삭제할 수 있기를 원합니다.


1
@rogerdeuce, ASP.net C # 프로젝트에서이 문제가 발생 했으므로 C #으로 태그가 지정되었습니다. 편집 주석을 기반으로 vb 태그도 추가했습니다.
stringo0

답변:


86

보낸 사람은 작업이 수행되는 컨트롤입니다 (예 : OnClick, 버튼).

EventArgs는이 이벤트의 구현자가 유용하다고 생각할 수있는 인수입니다. OnClick을 사용하면 좋은 것이 없지만 GridView 'SelectedIndexChanged'와 같은 일부 이벤트에서는 새 인덱스 또는 기타 유용한 데이터가 포함됩니다.

Chris가 말하는 것은 다음과 같이 할 수 있다는 것입니다.

protected void someButton_Click (object sender, EventArgs ea)
{
    Button someButton = sender as Button;
    if(someButton != null)
    {
        someButton.Text = "I was clicked!";
    }
}

4
감사! eventargs에 대해 확장 하시겠습니까, 아니면 그들에 대한 링크를 제공 하시겠습니까? 예를 들어 eventargs를 통해 문자열 값을 전달할 수 있습니까? 그렇다면 어떻게?
stringo0

5
"당신"은 이벤트를 보내는 클래스입니다. 따라서 일반적으로 'MyControlsEventEventArgs'로 'EventArgs'를 하위 클래스로 분류 한 다음 전달하려는 항목에 대한 속성을 설정합니다. 따라서 이벤트를 보내는 컨트롤을 작성할 때만 여기에 항목을 넣습니다. 버튼에 문자열 값을 넣으려면 일반적으로 'CommandArgument'필드를 사용합니다.이 필드는 보낸 사람을 'Button'으로 캐스팅하여 액세스 할 수 있습니다 (내 게시물에서와 같이).
Noon Silk

21

sender이벤트 핸들러를 실행 한 이벤트를 호출 한 개체를 나타냅니다. 동일한 이벤트 핸들러를 사용하는 객체가 많은 경우 유용합니다.

EventArgs더미 기본 클래스입니다. 그 자체로는 다소 쓸모가 없지만 그로부터 파생 된 경우 이벤트 처리기에 전달해야하는 데이터를 추가 할 수 있습니다.

당신이 당신의 자신의 이벤트를 구현할 때, 사용 EventHandler또는 EventHandler<T>자신의 유형으로합니다. 이렇게하면 모든 이벤트에 대해이 두 가지 매개 변수를 정확히 갖게됩니다 (좋은 점입니다).


8

보낸 사람을 사용자 지정 컨트롤 유형으로 수동 캐스팅 한 다음이를 사용하여 삭제하거나 비활성화합니다. 예를 들면 다음과 같습니다.

private void myCustomControl_Click(object sender, EventArgs e)
{
  ((MyCustomControl)sender).DoWhatever();
}

'보낸 사람'은 작업 된 (예 : 클릭 된) 개체입니다.

이벤트 인수는 더 복잡한 컨트롤 (예 : 트 리뷰)에 대해 서브 클래 싱되므로 이벤트에 대한 자세한 정보 (예 : 정확히 클릭 한 위치)를 알 수 있습니다.


이것에 대해 조금 확장 해 주시겠습니까? 발신자 / 이벤트 인수를 어떻게 처리합니까? 나는 그것들을 사용하는 데 익숙하지 않습니다.
stringo0

@ stringo0 보낸 사람은 이벤트를 발생시킨 개체입니다 (규칙에 따라 'this'를 전달하여 이벤트 대리자를 호출합니다). EventArgs는 하위 클래스가 아니라면 전혀 쓸모가 없습니다 . 따라서 SelectedIndexEventArgs 매개 변수 또는 CancelEventArgs가 없으면 아무것도 할 수 없습니다. 사용하는 데 익숙하지 않은 경우 단순히 필요하지 않지만 메서드 서명에 필요합니다. 따라서 단순히 무시할 수 있습니다. 이벤트를 처리하기 위해 람다를 작성하는 경우 이러한 인수의 이름을 쓸 필요조차 없습니다
usr-local-ΕΨΗΕΛΩΝ

5
  1. '보낸 사람'은 일부 제어에 대해 수행하는 작업이있는 개체라고합니다.

  2. '이벤트'는 일부 사용자가 수행하는 동작과 ID가있는 제어에 대한 정보를 가지고 있습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.