2009-03-13 3 views
4

현재 프로젝트에서 다른 탭에서 4 개의 격자보기를 사용하고 있습니다. 시스템이 개발됨에 따라 사용자 정의 툴팁 표시 및 행에 대한 마우스 오른쪽 버튼 클릭 메뉴와 같은 공유 방법이 있습니다.C#의 이벤트 처리기 재사용 우수 사례

지금 코드 정리 운동을하고 있습니다. 아래에서 볼 수있는 것은 동일한 메서드를 호출하는 네 개의 이벤트 처리기가 있다는 것입니다. 추가 코드를 피하면서 GridMenu를 직접 가리 키도록 이벤트 핸들러를 변경하는 것이 좋습니까? 이로 인해 나중에 개발 과정에서 문제가 발생합니까?

분명히 현재 기본 짝수 핸들러 이름을 사용하고 있습니다.

private void grdEnquiriesLevel1_ShowGridMenu(object sender, GridMenuEventArgs e) 
    { 
     GridMenu(sender, e); 
    } 

    private void grdApplicantsLevel1_ShowGridMenu(object sender, GridMenuEventArgs e) 
    { 
     GridMenu(sender, e); 
    } 

    private void grdApplicationsLevel1_ShowGridMenu(object sender, GridMenuEventArgs e) 
    { 
     GridMenu(sender, e); 
    } 

    private void grdInterviewsLevel1_ShowGridMenu(object sender, GridMenuEventArgs e) 
    { 
     GridMenu(sender, e); 
    } 

    private void GridMenu(object sender, GridMenuEventArgs e) 
    { 
     GridView view = (GridView)sender; 

     if (view.CalcHitInfo(e.Point).InRow) 
      popupMenu1.ShowPopup(Cursor.Position); 
    } 

답변

10

GridMenu에 직접 등록하는 대신 Grid_ShowGridMenu이라는 일반 이벤트 처리기를 만듭니다.

표마다 별도의 이벤트 처리기를 만드는 대신 각 표의 동일한 이벤트 처리기에 등록하면됩니다.

grdEnquiriesLevel1.ShowGridMenu += Grid_ShowGridMenu; 
grdApplicantsLevel1.ShowGridMenu += Grid_ShowGridMenu; 
grdApplicationsLevel1.ShowGridMenu += Grid_ShowGridMenu; 
grdInterviewsLevel1.ShowGridMenu += Grid_ShowGridMenu; 


private void Grid_ShowGridMenu(object sender, GridMenuEventArgs e) 
{ 
    GridMenu((GridView)sender, e.Point); 
} 

지금 대신 GridMenu 직접 sender, e를 전달하므로 는 재사용 될 수GridMenu에만 필요한 값을 전달하고 GridMenu의 서명을 변경.

private void GridMenu(GridView grid, Point hitPoint) 
{ 
    if (grid.CalcHitInfo(hitPoint).InRow) 
     popupMenu1.ShowPopup(Cursor.Position); 
} 
+0

@ 리치 B : 감사합니다 리치 B, 방금 편집 한 내용을 읽은 후 그 백틱에 대해 알았습니다. – Sung

0

이벤트 코드가 모든 컨트롤에 대해 일반적인 경우이 메서드는 훌륭하고 깨끗합니다.

코드에서 주요 if/else 또는 switch 블록을 시작하면 어쩌면 다시 생각할 시간입니다.

+1

5 회 자신을 "깨끗한"상태로 반복 할 수 있습니까? 여기에 하나 이상의 이벤트 처리 메소드를 포함 할 이유가 없습니다.이 메소드는 작업 자체를 수행하거나 다른 서명으로 다른 메소드를 연기합니다. –

+0

+ ve에서 읽어보십시오. "...이 방법은 훌륭하고 깨끗합니다."@ petebob796은 "이벤트 핸들러를 모두 GridMenu를 가리 키도록 변경하는 것이 좋습니다 ..."라고 말합니다. langauge가 완벽하지 않기 때문에 게시 할 때 -ve를 사용해서는 안됩니다. – TFD

0

사용자 정의 그리드를 캡슐화하는 사용자 정의 컨트롤을 만들어야합니다. 그렇게하면 모든 행동이 캡슐화되고 재사용 될 것입니다.

+0

재사용 할 필요가 없다면? – TFD

+0

이 경우 4 번 사용되므로 코드 중복이 발생합니다. –