2016-07-07 3 views
0

私は、クリックするとテキストボックスに含まれるすべてのサブフォルダのリストボックスに値を設定します。特定の深度/レベルのサブフォルダのみを返すように検索を実行することは可能ですか?例えばすべてのサブフォルダを返さないように特定の深さにフォルダを検索します。

、代わりに:

のfolder1> subfolder1> subfolder2> subfolder3> subfolder4

私は、最初の2つのレベル戻るためにそれを伝えることができます。 のfolder1> subfolder1> subfolder2>

を現在のコードは次のとおりです

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    AddFolders(txtsearchdirectory.Text) 
End Sub 
Private Sub AddFolders(root As String) 
    ListBox1.Items.Add(root) 
    Try 
     For Each folder As String In My.Computer.FileSystem.GetDirectories(root) 
      AddFolders(folder) 
      Application.DoEvents() 
     Next 
    Catch ex As Exception 
     System.Windows.Forms.MessageBox.Show(ex.Message) 
    End Try 
End Sub 
+0

ここでの 'Application.DoEvents()'の目的は何ですか?一般的に言えば、そのようなメッセージキューをポンピングする必要はありません。 –

+0

多くのコピー・ペースト・カーゴ・カルト・コードがここにあります。 DoEventsは本当の問題ですが、すべての例外を取り除くキャッチブロックも悪い考えです。メッセージボックスを取得するために例外を処理する必要はありません。これは未処理の例外に対して自動的に発生します。あなたが実際にできる例外を処理するだけです...まあ、処理してください。 'DoEvents'を使わないでください。それは魔法の "私のUIの応答を維持する"機能ではありません。このコードは、バックグラウンドスレッド上で実行する必要があるほど長くかかるべきではありません。ユーザーの脳が「クリック」イベントを処理するときに、マシン上のファイルシステム全体を反復することができます。 –

答えて

0

大量のツリービューで作業しているときに、このようにしました。私はそれをテストし、あなたが求めていることをしているようだ。変数を最大にしたい場合は、別のパラメータを追加してチェーンに渡します。

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    AddFolders(txtsearchdirectory.Text, 0) 
End Sub 

Private Sub AddFolders(root As String, recursionDepth As Integer) 
    If recursionDepth <= 2 Then 
     ListBox1.Items.Add(root) 
     Try 
      For Each folder As String In My.Computer.FileSystem.GetDirectories(root) 
       AddFolders(folder, recursionDepth + 1) 
       Application.DoEvents() 
      Next 
     Catch ex As Exception 
      System.Windows.Forms.MessageBox.Show(ex.Message) 
     End Try 
    End If 
End Sub 
+0

私はそれを追加していないので、あなたはOPを尋ねるほうがよいです。 –

+0

間違ったコメントフィールド。申し訳ありません。 –

+0

'' RecursionDepth> 0 Then Then '、' 'AddFolders(folder、recursionDepth - 1)'を使って、 '' AddFolders(txtsearchdirectory.Text、2) 'で呼び出すことで、よりきれいにすることができます。そこにオフ・バイ・ワン・エラーがあるかもしれません。 –

関連する問題