2016-01-20 63 views
0

我正在研究反病毒,基本上,当我扫描我的文件时,所有威胁将被添加到列表框中,并且我试图使用'For each'语句来删除列表中的每个项目框。我如何使用'For each'语句?

我的代码:

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

您有任何代码从列表框中删除任何项目工作。您需要'threatLb.RemoveAt'在某处 –

+0

@MattWilko - 除了在遍历它时修改“collection”。几乎保证不被允许或产生意想不到的结果,如跳过项目。 –

+1

*我知道 - 我正试图带领OP走上启蒙之旅! –

回答

3

拨打Select不符合您的想法。它不会'使当前选定的字符串,然后你可以抓住它使用SelectedItem。它只是激活ListBox控件。

但你根本不需要它。 For Each语句遍历项集合,并在时间还给你一个项目与

所以假定每一个项目是一个完整的路径

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