2012-01-15 3 views
1

작업중인 프로젝트의 DataGridviews에 이벤트 처리기를 재설정하는 데 문제가 있습니다.DataGridview 재사용 (이벤트 등록 취소)

직렬 포트에 연결 한 테스트 장치의 값으로 채울 수있는 데이터 그람저가 여러 개 있습니다. 테스트 세션이 완료되면 새 세션의 DataGridviews를 재설정하고 싶습니다.

내 문제는 내가 만든 각 셀에 대한 셀 클릭에 대한 이벤트를 등록하고 그 이벤트가 내가 DataGridviews를 지울 때 지속된다는 것입니다.

내가있는 DataGridView의 값을 나는 cellclick 이벤트를 추가하는 방법을 프로그래밍 여기

입니다 설정하고 :

for (int i = 0 ; i < dgList.Count ; i++) //dgList is list of datagridviews 
{ 
    int numberForEvent = i; //i is datagrid nr i 

    dgList[i].CellClick += ((sender, e) => 
    { 
     alterValueClick(numberForEvent, e.RowIndex); 
    }); 
} 

그것은 잘 내 프로그램을 처음 사용할 때 작동하지만을 나는의 DataGrids를을 재설정하는 경우 이벤트가 두 번 등록되는 등의 새로운 테스트 세션.

이벤트를 지우는 방법에 대한 아이디어가있는 사람이 있습니까? 아니면 디자인에 대한 잘못된 생각입니까?

+0

재설정으로 무엇을 의미합니까? –

+0

이벤트는 셀에 속하지 않고 dgv에 속합니다. 1-by1-1을 지우거나 새 그리드를 만듭니다. –

+0

죄송합니다. 재설정을 통해 데이터 격자를 반복하고 .rows.clear 및 .columns.clear를 사용합니다. – karra

답변

2

리셋하여 난을 DataGrids를 반복하고 .rows.clear 사용하지 이벤트 등록을 취소 할 열과 행을 삭제

.columns.clear를 의미. 두 가지 옵션이 있습니다.

- either re-initialize DataGrid and re-register the event 

- un-register previous event and re-register new one. 

그런데 왜 이벤트를 재설정해야합니까? 왜 이미 등록 된 이벤트를 사용하지 않습니까?

편집

나는 당신 때문에 당신이 그것을 선언하는 방법을 여기에 클릭 이벤트 등록을 취소 할 수 있다고 생각하지 않습니다. 그것은 같은 유엔 등록되지 않습니다 익명의 방법이

하는 이벤트 핸들러에게 단단한 방법을 할당 시도하고, 당신은 루프 내부에 등록하는 것처럼 그런

//for registering 
dgList[i].CellClick += new DataGridViewCellEventHandler(YourMethod); 

//for unregistering 
dgList[i].CellClick -= new DataGridViewCellEventHandler(YourMethod); 

작업에 대한 실행해야합니다 등록 해제를위한 루프.

+0

답변 해 주셔서 감사합니다! 이벤트를 다시 설정해야하는 이유는 테스트 장비에서 필요한 값의 수에 따라 데이터 그리드를 숨기는 경우가 있기 때문입니다. 그것은 값을 저장하는 방식과 관련이 있습니다. 이벤트 등록을 취소하는 방법에 대한 정보는 무엇입니까? – karra

+0

업데이트 된 답변보기 –

+0

Thanks again! 나는 첫 번째 제안을 사용하여 작동하도록 데이터 그레이드를 다시 초기화 할 수있었습니다. 별도의 메서드를 만들려고했지만 인수로 i 값을 제공 할 수 없습니다. 나는 꽤 윈도우 양식에 새로운 :) – karra