2013-02-20 1 views
0
여기

: http://msdn.microsoft.com/en-us/library/hkkb40tf(v=VS.90).aspx, 그것은 다른 버튼에서 버튼의 클릭 이벤트를 호출하는 것을 말한다 할 수 있습니다 /이이 방법을 수행해야합니다버튼의 클릭 이벤트를 호출하는 올바른 방법은 무엇입니까?

button1.PerformClick(); 

하지만, 내 상황에서 (VS 2003 NET 1.1),이 (위에서 언급 한 링크는 VS 2008을 지정하지만, MSDN은 종종 그렇듯이 이전 버전에 대한 관련 정보에 대한 링크를 가지고 있지 않습니다.

private void btnPrint_Click(object sender, System.EventArgs args) 
{ 
    if (this.recordChanged) 
    { 
     //btnSave.Click(); 
     btnSave_Click(sender, args); 
    } 
    . . . 

을 ...하지만 그것을 할 수있는 방법이 있는지 모르겠어요 :

이것은 컴파일합니다.

+0

컴파일 오류 란 무엇입니까? –

+1

WinForms? WPF? ASP.NET? – itsme86

+0

죄송합니다. 나는 지금 Tags (Windows CE)/WinForms를 바꾸었다. 컴파일 오류 'System.Windows.Forms.Button'에 'PerformClick'에 대한 정의가 없습니다. –

답변

6

실행하려는 비즈니스 논리를 별도의 메서드 (예 : DoSave())에 넣으면 이벤트 처리기는 서로 직접 호출하지 않고 해당 내부 메서드를 호출 할 수 있습니다.

이벤트 처리기 메서드를 직접 호출하여 "Faking"이벤트가 추악 해지고 버그가 발생할 수 있습니다 (향후 이벤트 처리기를 수정하는 프로그래머는 예상과 다른 조건에서 호출 할 수 있음을 인식하지 못하고 문서화 됨 인쇄 작업이 비정상적으로 작동하거나 저장 작업을 시도 할 때 크래시 될 수 있음)

향후 다른 곳에서 저장 작업을 수행 할 가능성이 있기 때문에 항상 좋은 아이디어입니다. 비즈니스 논리를 활성화하는 사용 인터페이스와 분리해야합니다.

+0

+1,이 사실을 충분히 강조 할 수는 없습니다. 의미 론적으로 올바른 일을하는 또 다른 이유는 향후 유지 보수 및 변경 중에 WTF를 피하는 것입니다. – Adam

+0

좋은 지적; 나는 일반적으로 새로운 것을 코딩 할 때 그렇게하지만, 기존의 앱을 유지하고이 기능을 조금 더 추가하는 방법을 취할 때 나는 평범한 습관을 버렸다. –

+0

이것은 올바른 해결책입니다. 비즈니스 로직을 실행하기 위해 GUI 핸들러에 의존하지 마십시오. 비즈니스 로직을 직접 호출하는 방법을 찾으십시오. – Alan

0

나는 할 것이다 btnSave.Click(sender, args);. http://msdn.microsoft.com/en-us/library/aa645739(v=VS.71).aspx

+0

이벤트에 선언 된 이벤트는'event'로 선언 할 수 없습니다. 왜냐하면'event'는'+ ='와'- ='를 제외한 모든 것을 사적인 범위로 제한하기 때문입니다. –