Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
ファイル検索プログラムより
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=9463#CommentId13638
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
over50
 (社会人)
投稿日時
2009/11/26 08:55:07
葉月さん、度々丁寧なRES.有難うございます。
もう少し早くアップしたかったのですが、動作確認に時間がかかって遅くなりました。
今回は、自分のPCの環境に合わせてTextChangedイベントに拘りました。
マルチブートとドライブが多く、自分では使いやすい物になったように思います。
デザインは、ドライブリストボックス、ディレクトリリストボックス、テキストボックス、ステータスバーとステータスストリップに、ラベルとプログレスバーを各1つづつ張り付けたものです。
特にコードの中のTextChangedイベントで、キー入力のイベント発生を遅らせる処理での
”System.Threading.Thread.Sleep(1000)
Application.DoEvents()”と、
ファイルが無い時のメッセージの処理は何とか出来たもののこれでいいのかよく解っていません。
その他を含め、皆さんから何かアドバイスをいただければ幸いです。
Public Class Form1
Dim SlctDirect As String '対象のディレクトリを宣言
Private Sub TextBox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
'キー入力でのイベントを遅らせて、スムーズにする。
System.Threading.Thread.Sleep(1000)
Application.DoEvents()
'表示を初期化
ToolStripProgressBar1.Value = 0
ToolStripStatusLabel1.Text = Nothing
Me.Text = ("簡易ファイル検索")
Me.ListBox1.Items.Clear()
Me.filesearch()
End Sub
Private Sub filesearch()
Const short_count_up As Short = 1
' 選択ディレクトリ
Dim strSelectDir As String = Me.SlctDirect
'何も入力されていない場合は何もしない。
If TextBox1.Text.Length = 0 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.TextBox1.Text
Dim strFile As String = String.Empty
' カウント変数
' 宣言はFor文の前で行うのがいいです。
Dim sCount As Short = 0
Try
For Each file In selectDirectory.GetFiles(strSearch & "*", IO.SearchOption.AllDirectories)
strFile = file.FullName
If System.IO.File.Exists(strFile) Then
sCount += short_count_up
strFile = file.FullName
arFiles.Add(strFile)
' プログレスバーの処理
ToolStripProgressBar1.Value = sCount / sCount * 100
ToolStripStatusLabel1.Text = String.Concat(+sCount.ToString() & "項目")
End If
Next
If strFile = String.Empty Then
Me.Text = "ファイルが見つかりません!"
End If
'エラー処理
Catch ex As System.UnauthorizedAccessException
MsgBox(ex.Message, MsgBoxStyle.Exclamation)
End Try
Me.ListBox1.BeginUpdate()
Me.ListBox1.Items.AddRange(arFiles.ToArray())
Me.ListBox1.EndUpdate()
End Sub
Private Sub ListBox1_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListBox1.DoubleClick
Dim path As String
Try
'選択ファイルの起動
path = ListBox1.SelectedItem
Process.Start(path)
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Exclamation)
End Try
End Sub
Private Sub DriveListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DriveListBox1.SelectedIndexChanged
DirListBox1.Path = DriveListBox1.Drive
Call DirListBox1_SelectedIndexChanged(sender, Nothing)
End Sub
Private Sub DirListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DirListBox1.SelectedIndexChanged
'対象のディレクトリの選択
SlctDirect = DirListBox1.DirList(DirListBox1.DirListIndex)
StatusBar1.Text = SlctDirect
End Sub
End Class