2013-09-27 25 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[]包含您的初始化過程中分配假對應迪爾斯陣列

回答

0

boolean數組你可以有一個布爾變量(類成員不是局部變量)。在ItemCheck事件中,檢查bool變量並決定繼續DB檢查。初始化完成後,將bool變量設置爲true。

0

如果你不希望創建一個布爾值,即會被檢查,你可以(在註釋說明)刪除/添加事件處理程序,如果你改變你的BuildCheckListControl - 方法是這樣的:

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 
}