VBレスキュー(花ちゃん)
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ各掲示板

メニューへ戻ります。 ComboBox Control 関係のメニュー
1.ComboBox コントロールに関するワンポイントテクニック集
2.ComboBox でテキストファイルを使っての読み込み書き込み
3.アイコン付の ComboBox を作成する
4.オーナードローによるComboBoxでの複数列表示 
5.ComboBox 内に指定フォルダー内のファイル一覧を取得表示
6.
7.
8. 
9. 
10. 
11.
12.
 . 
20.その他、当サイト内に掲載の ComboBox に関するサンプル 


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.上記実行結果
 vb2005combobox05_01
このページのトップへ移動します。 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.上記実行結果
 vb2005combobox05_02
表示設定については、4.オーナードローによるComboBoxでの複数列表示を参考にお好みで設定して下さい。

このページのトップへ移動します。 3.


このページのトップへ移動します。 4.


このページのトップへ移動します。 5. 



このページのトップへ移動します。 6.


このページのトップへ移動します。 検索キーワード及びサンプルコードの別名(機能名)
指定フォルダー内の指定の拡張子のファイルを更新日時順に取得 ファイルの一覧を更新日順に取得 ファイルの一覧を取得
オーナードロー 複数列表示 コンボボックス
DataSource プロパティの使用例  LINQ の使用例  Items.AddRange メソッドの使用例


このページのトップへ移動します。