0

チェックリストがあり、プログラムがロードされるときに、文字列とブール値のリストをチェックリストボックスにロードする必要があります。しかし、ブール値を設定しながら

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

-イベントが発生しcheckedListBoxControl1_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

初期化中に bool 変数 (ローカル変数ではないクラス メンバー) に false を割り当てることができます。ItemCheck イベントで bool 変数をチェックし、DB チェックを続行することを決定します。初期化が完了したら、bool 変数を true に設定します。

于 2013-09-27T08:06:33.723 に答える