2016-01-20 1 views
0

Я работаю над антивирусом, и в основном, когда я просматриваю свои файлы, все угрозы будут добавлены в список, и я пытаюсь использовать оператор «Для каждого», чтобы удалить каждый элемент в списке коробка.Как использовать инструкцию «Для каждого»?

Мой код:

For Each threat As String In threatsLb.Items 
    threatsLb.Select() 
    Dim KillFile As String 
    KillFile = threatsLb.SelectedItem.ToString() 
    If Len(Dir$(KillFile)) > 0 Then 
     SetAttr(KillFile, vbNormal) 
     Kill(KillFile) 
    End If 
Next 

Любые предложения, почему это не удаление файлов из элементов в списке?

+0

У вас нет коды, чтобы удалить все элементы из Listbox , Вам нужно 'угрозLb.RemoveAt' где-то –

+0

@MattWilko - за исключением того, что будет модифицировать« коллекцию »при повторении через нее. Почти гарантированно не допускается или не дает неожиданных результатов, таких как пропуски предметов. –

+1

* Я знаю это - я пытался возглавить ОП на пути просветления! –

ответ

3

Звонок на Select не работает, что вы думаете. Он не делает текущую строку выбранной, а затем вы можете ее захватить с помощью SelectedItem. Он просто активирует элемент управления ListBox.

Но вам это просто не нужно. Для каждого оператора петель по сбору предметов и возвращает вам деталь во время работы с

Так предположит, что каждый элемент полного пути

For Each threat As String In threatsLb.Items 
    File.SetAttributes(threat, FileAttributes.Normal) 
    File.Delete(threat) 
Next 

' And finally 
threatsLb.Items.Clear() 
+0

Спасибо, сэр :) –

+1

Обратите внимание, что я удалил все вызовы _old-style_ VB6. Попытайтесь использовать при написании нового кода функции, доступные в NET Framework вместо тех, которые сохраняются только для совместимости с VB6/VBA – Steve

 Смежные вопросы

  • Нет связанных вопросов^_^