2013-09-27 5 views
0

체크리스트가 있고 프로그램이로드되면 체크리스트 상자에 문자열 목록과 부울 목록을로드해야합니다. 그러나사용자 확인 및 프로그래밍 방식으로 확인

checkedListBoxControl1.SetItemChecked(i, checkedList[i]);; 

checkedListBoxControl1_ItemCheck - 이벤트 화재로 논리 값을 설정하는 동안. 나는 화재가 발생하면 데이터베이스를 새로 고치고 완료하는 데 오랜 시간이 걸리기 때문에 그것을 원하지 않습니다. 나는 사용자가 체크리스트를 바꿀 때만 발동하기를 원한다. 체크 상태.

참고 : 나는

이 목록 상자를 채우는 내 방법이 될 수 있음 현재 내가 그와 그 추악한을 할 수있는 플래그를 사용하고 있고 다른 여기 나에게

 private void checkedListBoxControl1_ItemCheck(object sender, DevExpress.XtraEditors.Controls.ItemCheckEventArgs e) //fires second on check 
    { 

     int index = e.Index; 
     bool isChecked = e.State == CheckState.Checked; 

     this.mediaCenter.ItemManager.SetDirectoryCheck(index, isChecked); 

     if (this.IsUserClick) 
      BuildDatabaseAsync(); 

     this.IsUserClick = false; 
    } 

    private bool IsUserClick; 
    private void checkedListBoxControl1_Click(object sender, EventArgs e) //Fires first on check 
    { 
     if (checkedListBoxControl1.SelectedItem == null) return; 
     IsUserClick = true; 

    } 

을 많은 문제를 제공해야 통제가 처음에는 이상합니다. 그러나 경로를 따라 많은 원치 않는 변경으로 인해.

private void BuildCheckListControl(string[] dirs) 
    { 
     IsUserClick = false; 

     this.checkedListBoxControl1.DataSource = dirs; 

     for (int i = 0; i < dirs.Length; i++) 
       checkedListBoxControl1.SetItemChecked(i, checkedList[i]); 
    } 

checkedList[]이 초기화 중에 잘못된 할당 당신은 부울 변수를 가질 수 DIRS 배열

답변

0

에 해당하는 논리 값의 배열 (클래스 멤버가 아닌 지역 변수)가 포함되어 다음과 같이 나는 그것을 할. ItemCheck 이벤트에서 bool 변수를 검사하고 DB 검사를 진행하기로 결정하십시오. 초기화가 완료되면 bool 변수를 true로 설정합니다.

0

당신은 부울을 만들지 않으려면, 그가 (주석에 명시된)이처럼 BuildCheckListControl -Method을 변경 한 경우에는 이벤트 핸들러를 추가/제거 할 수 있습니다 확인할 수 있습니다 :

private void BuildCheckListControl(string[] dirs) 
{ 
    checkedListBoxControl1.ItemCheck -= checkedListBoxControl1_ItemCheck; //Will remove your Eventhandler 

    //IsUserClick = false; //You shouldn't need that anymore. 

    this.checkedListBoxControl1.DataSource = dirs; 

    for (int i = 0; i < dirs.Length; i++) 
      checkedListBoxControl1.SetItemChecked(i, checkedList[i]); 

    checkedListBoxControl1.ItemCheck += checkedListBoxControl1_ItemCheck; //Will add your Eventhandler again 
} 
관련 문제