投稿者 葉月  (社会人) 投稿日時 2009/11/24 07:53:36
いくつか気になる点があったので、修正用にサンプルを作りました。
ですが、サンプルの説明をする時間がなくなりました。
(これから、親戚の課題をアドバイスするため別のサンプル作りをします)
こちらに時間を割かないといけないので、即席になりました。
いつも以上にヤバいできですがご了承ください。


>>>状態推移
 BackgroundWorkerクラスを使うのが機能的にもいいですが、
 ループ中にMe.Textを変更するだけでポンプの役割を果たします。
 今回それでごまかしています。

■サンプル
以下のコントロールを貼り付けてください。
テキストボックス×2
リストボックス×1
ボタン×1

Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles Button1.Click
        Me.FileSearch()
    End Sub

    ''' <summary> 
    ''' ファイルを探す。 
    ''' </summary> 
    Private Sub FileSearch()
        ' 選択ディレクトリ 
        Dim strSelectDir As String = Me.TextBox1.Text

        If Not System.IO.Directory.Exists(strSelectDir) Then
            Return
        End If

        ' 作業ディレクトリ 
        Dim selectDirectory As New System.IO.DirectoryInfo(strSelectDir)
        ' 作業ファイル 
        Dim file As System.IO.FileInfo
        ' 一時的にファイルを格納 
        Dim arFiles As New ArrayList()
        ' 探すファイル 
        Dim strSearch As String = Me.TextBox2.Text
        Dim strFile As String = String.Empty

        ' カウント変数 
        ' 宣言はFor文の前で行うのがいいです。 
        Dim sCount As Short = 0

        For Each file In selectDirectory.GetFiles(strSearch & "*", IO.SearchOption.AllDirectories)
            If Not file.Exists() Then
                MessageBox.Show("ファイルが存在しません")
            Else
                strFile = file.FullName
                arFiles.Add(strFile)
                Me.Text = String.Concat("処理ファイル数:" + sCount.ToString())
                ' プログレスバーの処理 
            End If
        Next

        Me.ListBox1.BeginUpdate()
        Me.ListBox1.Items.AddRange(arFiles.ToArray())
        Me.ListBox1.EndUpdate()
    End Sub
End Class