チェックリストがあり、プログラムがロードされるときに、文字列とブール値のリストをチェックリストボックスにロードする必要があります。しかし、ブール値を設定しながら
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 配列に対応するブール値の配列を含む