2017-04-23 135 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语句从 –