2016-01-20 61 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