2012-09-24 3 views
0

DataGridView를 사용하여 C# 프로젝트에서 작업 중이며 문제가 발생했습니다.C# DataGridView의 특정 개체에 마우스 이벤트 바인딩

기본적으로 나는 여러 위치에서 업데이트되고 버튼 열이있는 표가 있습니다.

물론 단추 클릭을 캡처하고 해당 단추 행의 다른 셀과 관련된 작업을 수행하려고합니다. 지금까지 내가 아는 한, 클릭을 그리드의 행과 연결하는 유일한 방법은 EventArgs의 RowIndex를 사용하는 것입니다.

내가 걱정하는 점은 사용자 클릭과 전달되는 이벤트 사이에서 그리드가 변경되어 잘못된 행이 클릭 된 것처럼 보이게하는 것입니다.

편집증 환자가 될 수 있습니까? 가능하다면 어쨌든 단추 나 행의 eventargs에 대한 참조를 바인드 할 수 있습니다. 그래서 인덱스가 변경된 후에도 원래 행을 구별 할 수 있습니까?

답변

1

WinForms의 GUI 컨트롤은 UI 스레드와 묶여 있습니다.

행을 클릭하면 그리드 구현이이를 처리하고 클릭 핸들링의 일부로 이벤트가 발생합니다. 모두 동일한 UI 스레드에서 발생합니다. 다른 스레드가 그리드 내용을 변경하더라도 UI 스레드 (일반적으로 백그라운드에서 Windows 메시지를 게시하거나 WinForms 용어로는 BeginInvoke - 정확하게 동일하지는 않지만 닫음)로 직렬화해야합니다.

즉, 동시 변경이 있어도 클릭이 이미 등록 된 경우 UI 업데이트로 인해 이벤트가 중단되지 않습니다.

그러나 백그라운드 스레드는 핸들러가 실행되는 동안 또는 클릭 발생과 이벤트 처리 사이에 행이 바인딩되는 데이터 객체를 변경할 수 있습니다. 그리드 UI 업데이트를 직렬화해야하고 이벤트 핸들러 이후에도 계속 발생하기 때문에 여전히 차이는 없습니다.

관련 문제