5.ComboBox 内に指定フォルダー内のファイル一覧を取得表示(17_Cbo_05) |
1.DataSource プロパティを使っての指定フォルダー内のファイル一覧を取得 2.指定フォルダー内の指定のファイルを更新日時順に取得 3. 4. 5. 6. |
下記プログラムコードに関する補足・注意事項 動作確認:Windows 8.1 (Windows 7) / VB2013 (VB2010) / Framework 4.5.1 / 対象の CPU:x86 Option :[Compare Text] [Explicit On] [Infer On] [Strict On] Imports :追加なし 参照設定:追加なし その他 : : このサンプル等の内容を無断で転載、掲載、配布する事はお断りします。(私の修正・改訂・削除等が及ばなくなるので) 必要ならリンクをはるようにして下さい。(引用の場合は引用元のリンクを明記して下さい) |
1.DataSource プロパティを使っての指定フォルダー内のファイル一覧を取得 |
通常は、下記のような方法で取得しているサンプルが多いのですが、表示する事が目的なら DataSource プロパティを使えばたった一行の記述で取得表示する事ができます。 For Each FileName In System.IO.Directory.GetFiles(FolderName) ListBox1.Items.Add(System.IO.Path.GetFileName(FileName)) Next Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 'DataSource プロパティを使っての指定フォルダー内のファイル一覧を取得 Dim FolderName As String = Environ("windir") & "\system32" '取得結果を ComboBox に表示 With ComboBox1 .IntegralHeight = False .DrawMode = DrawMode.Normal .BeginUpdate() .Items.Clear() .Font = New Font("MS Pゴシック", 9, FontStyle.Regular) 'この一行だけの記述で簡単に取得する事ができる .DataSource = System.IO.Directory.GetFiles(FolderName) .EndUpdate() .Text = .Items.Count & " 件見つかりました。" End With End Sub 図1.上記実行結果 |
2.指定フォルダー内の指定のファイルを更新日時順に取得 |
指定フォルダー内のファイル一覧を表示するだけなら、FileListBox コントロールを使用すればいいのですが、なぜか? VB2013 ではコントロールが見当たらない。(VB2012
までは追加できるのだが) 又、更新日付順に並べて取得したいなどと言った要望もあるので作って見ました。 Public Class Form1 Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click '指定フォルダー内の指定のファイルを更新日時順に取得 Dim folderBrowserDialog1 As New FolderBrowserDialog Dim folderPath As String = System.IO.Path.GetFullPath("..\..\..\data") folderBrowserDialog1.SelectedPath = folderPath 'ダイアログボックスに[新しいフォルダーの作成]ボタンを表示しない場合は False folderBrowserDialog1.ShowNewFolderButton = False folderBrowserDialog1.Description = "下記から希望のプログラムのフォルダーを選択して下さい。" If folderBrowserDialog1.ShowDialog() = DialogResult.OK Then 'フォルダー名を取得 folderPath = folderBrowserDialog1.SelectedPath End If 'ここからが LINQ を使っての取得部分 System.IO.Path.GetExtension(File.Name) Dim Files = New IO.DirectoryInfo(folderPath).GetFiles() '指定フォルダー内の *.txt ファイルを更新日時順(最新日付順)に取得(ファイルの指定は下記でご自由に) Dim query = From File In Files Where File.Name Like "*.*" _ Order By File.LastWriteTime Descending Select File.Name & vbTab & File.LastWriteTime '取得結果を ComboBox に表示 With ComboBox1 .Items.Clear() .IntegralHeight = False .BeginUpdate() .DrawMode = DrawMode.OwnerDrawFixed .Items.Clear() .Font = New Font("MS Pゴシック", 9, FontStyle.Regular) .Items.AddRange(query.ToArray) .EndUpdate() .Text = .Items.Count & " 件見つかりました。" End With End Sub Private Sub ComboBox1_DrawItem(sender As Object, e As DrawItemEventArgs) Handles ComboBox1.DrawItem e.DrawBackground() '背景を描画 Dim r As Rectangle = e.Bounds '項目の描画領域を取得 With Me.ComboBox1 'ファイル名と日付を分割 Dim Wk1 As String() = CType(.Items(e.Index), String).Split(CChar(vbTab)) 'ファイル名の表示設定 e.Graphics.DrawString(Wk1(0), e.Font, New SolidBrush(e.ForeColor), r.Left + 5, r.Top) '日付の表示設定(できれば、表示位置は事前にファイル名の長さを取得しておいて反映するようにして下さい) '表示位置がかぶっても読み難いだけで実質上は問題ありません。 e.Graphics.DrawString(Wk1(1), e.Font, New SolidBrush(e.ForeColor), New PointF(300, r.Top)) End With e.DrawFocusRectangle() 'フォーカスを示す四角形を描画 End Sub End Class 図2.上記実行結果 表示設定については、4.オーナードローによるComboBoxでの複数列表示を参考にお好みで設定して下さい。 |
3. |
4. |
5. |
6. |
検索キーワード及びサンプルコードの別名(機能名) |
指定フォルダー内の指定の拡張子のファイルを更新日時順に取得 ファイルの一覧を更新日順に取得 ファイルの一覧を取得 オーナードロー 複数列表示 コンボボックス DataSource プロパティの使用例 LINQ の使用例 Items.AddRange メソッドの使用例 |