Создание / удаление объектов с помощью проверки, если переключается в CheckListBox в VB.Net - PullRequest
1 голос
/ 12 апреля 2020

Я играю с некоторыми CheckedListItems в CheckBoxes, и у меня возникают проблемы с определением, когда указанный c проверенный Продукт проверен и / или не отмечен через его индексную позицию. Из отладки MsgBox я знаю, что, если я выбираю либо Product Allpurpose Cleaner, либо Clean Wipes, он вызывает MsgBoxes обоих методов, несмотря на то, что я пытаюсь использовать logi c для выполнения только для этого указанного c Product. Каким-то образом он думает, что я выбрал оба элемента?

Итак, по сути, я пытаюсь сделать это:

Если отмечен нулевой элемент в CheckedListBox, вызовите меню соответствия, чтобы получить желаемое количество, и затем вернитесь в меню заказа. , Нулевой элемент ElseIF в CheckedListBox снят. Удалите его из текущего заказа.

По сути, это будет промыть и повторить для всех элементов в моем CheckedListBox. Я подозреваю, что VB. NET заставляет мой код «проваливаться», и он думает, что все элементы, которые я выбираю, являются одинаковыми, несмотря на мои попытки предотвратить это.

Могу ли я подумать об этом?

Спасибо.

Private Sub CleaningProductsList_SelectedIndexChanged(sender As Object, e As EventArgs) Handles CleaningProductsList.SelectedIndexChanged

    Dim allPurposeCleaner = New AllPurposeCleaner()
    Dim cleaningCloths = New cleaningCloths()

    ' If checked.
    If CleaningProductsList.GetItemChecked(0) = True Then
        isChecked = True
        Me.Hide()
        ' MsgBox("All Purpose Cleaner Selected")
        AmountMenue.setGivenProduct(allPurposeCleaner)
        AmountMenue.Show()
        ' If unchecked.
    ElseIf CleaningProductsList.GetItemChecked(0) = False Then
        isChecked = False
        ' MsgBox("All Purpose Cleaner  UnSelected ")
        MsgBox(CleaningProductsList.GetItemChecked(0).ToString + " ALLPURPOSE UNCHECKED")
        AmountMenue.removedGivenProduct(allPurposeCleaner)
    End If

    ' If checked.
    If CleaningProductsList.GetItemChecked(1) = True Then
        Me.Hide()
        AmountMenue.setGivenProduct(cleaningCloths)
        MsgBox("cleaning cloths Selected ")
        AmountMenue.Show()
        ' If unchecked.
    ElseIf CleaningProductsList.GetItemChecked(1) = False And CleaningProductsList.CheckOnClick = False Then
        MsgBox("cleaning cloths  UnSelected ")
        MsgBox(CleaningProductsList.GetItemChecked(2).ToString + " Cleaning Cloths UNCHECKED")
        isChecked = False
        AmountMenue.removedGivenProduct(cleaningCloths)
    End If 
End Sub

1 Ответ

0 голосов
/ 12 апреля 2020

Вот пример того, как вы определяете изменения в CheckedListBox:

Private checkedIndexes As New List(Of Integer)
Private checkedItems As New List(Of String)

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    CheckedListBox1.Items.AddRange({"First", "Second", "Third", "Fourth", "Fifth"})
End Sub

Private Sub CheckedListBox1_ItemCheck(sender As Object, e As ItemCheckEventArgs) Handles CheckedListBox1.ItemCheck
    If e.NewValue = CheckState.Checked Then
        'An item is being checked.
        checkedIndexes.Add(e.Index)
        checkedItems.Add(CStr(CheckedListBox1.Items(e.Index)))
    Else
        'An item is being unchecked.
        checkedIndexes.Remove(e.Index)
        checkedItems.Remove(CStr(CheckedListBox1.Items(e.Index)))
    End If

    Label1.Text = $"Checked indexes: {String.Join(", ", checkedIndexes)}"
    Label2.Text = $"Checked items: {String.Join(", ", checkedItems)}"
End Sub

Параметр e сообщает вам, какой элемент изменяется, через свойство Index и что он меняет от и до, через свойства CurrentValue и NewValue.

Если вы хотите получить полный список отмеченных элементов в этом обработчике событий, поскольку событие вызывается до того, как изменение будет завершено, вам нужно чтобы начать со списка, предоставленного элементом управления, а затем добавить или удалить текущий элемент:

Dim checkedItems = CheckedListBox1.CheckedItems.Cast(Of String)().ToList()

If e.NewValue = CheckState.Checked Then
    checkedItems.Add(CStr(CheckedListBox1.Items(e.Index)))
Else
    checkedItems.Remove(CStr(CheckedListBox1.Items(e.Index)))
End If

'Use checkedItems here.
...