2010-06-03 5 views
1

이 코드는 선택 변경 이벤트를 두 번 트리거합니다. 내가 어떻게 막을 수 있니? 현재이 문제를 방지하기 위해 플래그 또는 집중된 속성을 사용하고 있습니다. 그러나 실제적인 방법은 무엇입니까?이벤트 바인딩을 제거한 후에도 DataGridView의 SelectionChange 이벤트가 DataBinding에서 두 번 실행됩니다.

나는 winfoms

편집에 사용하고

질문을 서면으로 내 실수는, 여기에 내가

private void frmGuestInfo_Load(object sender, EventArgs e) 
{ 
this.dgvGuestInfo.SelectionChanged -= new System.EventHandler(this.dgvGuestInfo_SelectionChanged); 
dgvGuestInfo.DataSource=dsFillControls.Tables["tblName"]; 
this.dgvGuestInfo.SelectionChanged += new System.EventHandler(this.dgvGuestInfo_SelectionChanged); 
} 

private void dgvGuestInfo_SelectionChanged(object sender, EventArgs e) 
{ 
//this function is raised twice, i was expecting that this will not be raised 
} 

답변

0

을 물어보고 싶은게 올바른 코드입니다 DataSource 속성을 설정할 때마다 이벤트가 발생합니다.

DataSource 한 번만 설정해야합니다.

동일한 이벤트 핸들러를 두 번 추가 할 수 있습니다.
dgvGuestInfo_SelectionChanged을 마우스 오른쪽 단추로 클릭하고 모든 참조 찾기를 클릭하십시오.

또한 이벤트 처리기에서 호출 스택을 확인하십시오.

+0

왜 이런 일이 발생합니까? 어떻게 피할 수 있습니까? 나는 심지어 데이터를 설정하고 이벤트를 다시 바인딩하는 순간에 이벤트를 취소했습니다. 그럼 왜 아직도 이벤트가 발생합니까? –

+0

왜 '데이터 소스'를 두 번 설정하고 있습니까? 핸들러에 중단 점을 넣고'Just My Code'를 비활성화하고 호출 스택을 봅니다. – SLaks

+0

또한 핸들러를 두 번 추가하지 않도록하십시오. 'dgvGuestInfo_SelectionChanged'을 마우스 오른쪽 버튼으로 클릭하고 모든 참조 찾기를 클릭하십시오. – SLaks

0

나는 아주 똑같은 문제가 있습니다. 때로는 SelectionChanged 작품에서 등록 취소하는 경우가 있습니다. 때로는 그렇지 않습니다. 내가 너무 개인 플래그를 사용하는 것이 선택이 끝난 것

  this.SelectionChanged -= ManageSelectionChanged; 

      try 
      { 
       // code that could fire this.SelectionChanged 
      } 
      finally 
      {      
       this.SelectionChanged += ManageSelectionChanged;     
      } 

,하지만 ... 난 아직도 궁금 :

내가 시도에 재 등록/등록 취소거야/마지막으로 구성.

관련 문제