2009-06-23 2 views
1

필자의 경우에는 패널이 있지만 필자는 예제에서 버튼을 사용할 것이다."this"를 제대로 사용하여 양식 컨트롤에 액세스하는 방법?

5 개 이상의 버튼이 있고 이벤트 (예 : OnMouseHover)가 5 개의 버튼 모두에 설정되어 있습니다. 모든 이벤트가 한 가지 방법으로 연결되는 경우 어떤 마우스가 마우스 오버 되었습니까?

마우스를 맴도는 버튼을 캡처하려면 "this"를 사용해 보았지만 양식 자체에 연결되었습니다.

private void buttonX_MouseHover(object sender, EventArgs e) 
    { 
     this.Text = "Test"; 
    } 

나는 마우스가 해당 텍스트에 "테스트"를 변경 가리킬 지정된 버튼의 텍스트를 예상하지만, 그것은 단지 form.Text에 일어났다.

내 실제 프로그램에서 나는 60 개의 패널을 가지고 있으며, 다시 한 번 모든 OnMouseHover 이벤트에 대해 하나의 메서드를 사용합니다. 마우스가 맴도는 패널 (위의 예제에서 단추)은 어떻게 얻을 수 있습니까?

답변

8

this은 항상 클래스 인스턴스 (양식)를 참조합니다. 대신 보낸 사람을 캐스팅해야합니다

보낸 사람이
((Control)sender).Text = "Test"; 

(일반적으로) 인스턴스는 이벤트를 발생 - 여러 컨트롤에서 동일한 핸들러를 유용하게 사용하는 경우.

+0

감사합니다. 내 하루를 저장했습니다. 질문이 하나뿐입니다. 모든 이벤트에서 "보낸 사람"이 컨트롤에 연결되어 있습니까? –

+1

@ 존 : 그렇습니다. 이벤트를 발생시키는 모든 인스턴스에 항상 연결됩니다. 컨트롤의 경우에는 현재 컨트롤입니다. –

+1

그러나 직접 이벤트를 발생시킬 때는 적절한 인스턴스 ('this')를 수동으로 전달해야합니다. 왜냐하면 이것은 컴파일러에 의해 보장되지 않기 때문입니다. 나는 마크가 "일반적으로"그의 대답에서 의미하는 바를 추측합니다. –

2

항상 클래스입니다.이 경우 양식 자체입니다. "보낸 사람"이라는 대상은 마법의 단어입니다. 단추 인 경우 다시 단추로 변환하십시오. 객체는 단지 참조이므로 전송 객체를 변경할 수 있습니다.

관련 문제