2017-04-23 127 views
1

我正在使用這部分代碼到一個vb.net項目來關閉三個特定的文件夾,但只有兩個關閉。任何想法爲什麼發生這種情況?VB.NET - 一次關閉多個文件夾

Private Sub CloseFolders_Button_MouseClick(sender As Object, e As MouseEventArgs) Handles CloseFolders_Button.MouseClick 
    Dim FrapsFolder_C As String = FrapsFolder_TextBox.Text 
    Dim DestVideoFolder_C As String = DestVideoFolder_TextBox.Text 
    Dim DestImagesFolder_C As String = DestImagesFolder_TextBox.Text 
    Dim sh As Object = CreateObject("shell.application") 

    For Each w In sh.Windows 
     If w.document.folder.self.Path = FrapsFolder_C Or 
      w.document.folder.self.Path = DestVideoFolder_C Or 
      w.document.folder.self.Path = DestImagesFolder_C Then 
      w.Quit 
     End If 
    Next 
End Sub 
+1

這是一個麻煩的API,這可以追溯到當他們試圖讓資源管理器類似瀏覽器的日子。不要贊成w.URL屬性,你只需要過濾掉file://前綴。並且記住,瀏覽器是一個單實例的應用程序,在啓動時的3倍,那麼你仍然只有1個進程,顯示3個窗口。留意任務管理器。 –

回答

1

這是一個非常奇怪的問題。我浪費了大量的時間試圖解決沒有結果。不過,我盡力解決這個問題。

我剛剛重新寫入你的主代碼到一個子程序,以便能夠根據打開的文件夾數量使用它幾次。

Sub CloseFolders(folder1 As String, folder2 As String, folder3 As String) 
    Try 
     For Each w In sh.windows 
      ' I used select .. case instead of if statement for readability 
      Select Case w.document.folder.self.Path 
       Case folder1, folder2, folder3 
        w.Quit() 
      End Select 
     Next 
    Catch ex As Exception 
     MessageBox.Show(ex.Message) 
    End Try 
End Sub 

然後在點擊事件中,你可以調用這個子程序,像這樣:

For i As Integer = sh.windows.count - 1 To 1 Step -1 
     CloseFolders(FrapsFolder_TextBox.Text, DestVideoFolder_TextBox.Text, DestImagesFolder_TextBox.Text) 
    Next 

不要忘了申報和創建shell

Dim sh As Object = CreateObject("shell.application") 

我期待着找到解決方案更好我想,而不是使用shell程序,我不知道它會擦出火花,不過我更願意接近你原來的代碼,就像我可以。

+0

我的朋友Abdulfattah,它的工作一次(!),但後來,當我試圖關閉文件夾很多次,我也有同樣的問題。如果你知道任何其他方式,請告訴我。使用其他方式工作沒有問題! –

+0

我也得到這個錯誤...'未指定的錯誤(異常從HRESULT:0x80004005(E_FAIL)' –

+1

@Simonetos 你是什麼意思工作「一次」?它對我來說工作正常。請確保你聲明shell一次和最重要的潛艇 看看這個截圖,請 http://imgur.com/a/UdNPo 這是不可避免的與此方法。您可以隱藏它與刪除messageBox語句從 –