0

我有一个检查列表,当程序加载时,我需要将字符串和布尔值列表加载到检查列表框中。但是在设置布尔值的同时

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

-EventcheckedListBoxControl1_ItemCheck触发。我不希望这样,因为当它触发时,它会刷新我的数据库并且需要很长时间才能完成。我只希望它在用户更改选中列表检查状态时触发。

注意:我有

目前我正在使用 A 标志来做到这一点,它很丑,在这里给我带来了很多其他问题

     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 数组的布尔数组

4

2 回答 2

0

您可以在初始化期间将布尔变量(类成员不是局部变量)分配为 false。在 ItemCheck 事件中检查 bool 变量并决定继续进行 DB 检查。初始化完成后,将 bool 变量设置为 true。

于 2013-09-27T08:06:33.723 回答
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
}
于 2013-09-27T12:57:04.323 回答