2014-01-02 2 views
0

Я хочу связать ComboBox с отмеченными элементами от CheckedListBox на основе выбора, сделанного пользователем.Связать ComboBox динамически с элементами CheckedListBox?

Это, как я связать ComboBox:

private void LoadFOCOutlets() 
    { 
     ArrayList outletList = new ArrayList(); 
     Outlet objOutlet = new Outlet(); 

     for (int i = 0; i < customCheckListBoxOutletList.CheckedItems.Count; i++) 
     { 
      objOutlet = (Outlet)customCheckListBoxOutletList.Items[i]; 
      outletList.Add(objOutlet); 
     }    

     objOutlet.OutletID = 0; 
     objOutlet.OutletName = "Select Outlet"; 
     outletList.Insert(0, objOutlet); 

     cmbFOCOutlets.DataSource = outletList; 
     cmbFOCOutlets.DisplayMember = "OutletName"; 
     cmbFOCOutlets.ValueMember = "OutletID"; 
     cmbFOCOutlets.DropDownStyle = ComboBoxStyle.DropDownList; 
    } 

Таким образом, каждый раз, когда пользователь проверяет новый элемент, он должен повторно связать ComboBox. Вышеприведенный код работает нормально.

Но какое событие CheckedListBox можно использовать для повторной привязки ComboBox после проверки нового элемента? Я попытался использовать Проверка изделия Событие. Но он не учитывает текущий выбор.

Любая помощь будет очень оценена.

ответ

1

Попробуйте это событие

private void CheckedListBox1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    //Your code here 
} 

(или)

private void CheckedListBox1_ItemCheck(object sender, EventArgs e) 
{ 
    //Your code here 
} 

Refer This

0

взята из Какое событие CheckedListBox срабатывает после того, как элемент проверяется следующий? Which CheckedListBox event triggers after a item is checked? (Ответ # 3)

softburger гласит: Я попробовал это, и она работала: (кажется, работает для меня тоже)

private void clbOrg_ItemCheck(object sender, ItemCheckEventArgs e) 
{ 
    CheckedListBox clb = (CheckedListBox)sender; 
    // Switch off event handler 
    clb.ItemCheck -= clbOrg_ItemCheck; 
    clb.SetItemCheckState(e.Index, e.NewValue); 
    // Switch on event handler 
    clb.ItemCheck += clbOrg_ItemCheck; 

    // Now you can go further 
    CallExternalRoutine();   
} 

Идея заключается в том, как уже упоминалось во многих постах, CheckedListBox имеет событие ItemCheck, но не событие ItemChecked.

Чтобы обойти эту проблему, назначение обработчика ItemCheck кратковременно приостанавливается (в пределах самого (!?) Обработчик рутина ItemCheck),

, во время которого метод SetItemCheckState в CheckedListBox в вызывается для вновь зарегистрированного пункта (который должен поместить элемент в коллекцию CheckedItems CheckedListBox)

, после чего затем передается обработчик ItemCheck.

т.е.

// Switch off event handler 
clb.ItemCheck -= clbOrg_ItemCheck; 
clb.SetItemCheckState(e.Index, e.NewValue); 
// Switch on event handler 
clb.ItemCheck += clbOrg_ItemCheck; 

и теперь вы можете (наконец) получить все theCheckedListBox Проверено товары из своей коллекции CheckedItems. (большой взлом, если вы спросите меня)

+0

Извините, это проверенная коллекция (не список CheckItems) – RandallM77