VB.NET ネタです。
Windows Form などで DataGridView が使えます。
これは、Excel のような表(行・列)ですが、
列(セル)にはテキストだけではなく、画像・ボタン・チェックボックス・コンボボックスなどが使えます。
一覧表的なものを表現するにはとても便利なコントロールです。
さて、本ネタでは ファイルまたはフォルダーをドラッグ&ドロップして
DataGridView にファイル一覧を表示するサンプルをご紹介。
動きはこんな感じです・・・
ドラッグ&ドロップ部分のコードは次のとおり。
(読みやすさのため、半角スペースを全角に置き換えています)
' ---● frm_Main: DragEnter
Private Sub MyBase_DragEnter(sender As Object, e As DragEventArgs) _
Handles MyBase.DragEnter, DataGridView1.DragEnter
' --- ドラッグ中のファイルやディレクトリの取得
Dim Drags() As String = CType(e.Data.GetData(DataFormats.FileDrop), String())
' --- フォルダーかファイルかを判別(FileSystemType)
Me.FsType = Me.fnc_FileSystemType(Drags)
' --- fsType に応じた処理
Select Case Me.FsType
Case = "File"
' ---▼ ファイルの場合
Me.TextBox1.Text = "ファイル"
For idx = 0 To Drags.Count - 1
ReDim Preserve Me.AryFileName(idx)
Me.AryFileName(idx) = Drags(idx)
Next
Case = "Folder"
' ---▼ フォルダーの場合
Me.TextBox1.Text = "フォルダー"
Me.AryFileName = System.IO.Directory.GetFiles _
(Drags(0), "*", System.IO.SearchOption.TopDirectoryOnly)
Case Else
Exit Sub ' -- ファイルでもフォルダーでもなければ,処理を抜ける
End Select
' --- ドロップ時にコピーを可能にする
e.Effect = DragDropEffects.Copy
End Sub
' ---● frm_Main: DragOver
Private Sub frm_Main_DragOver(sender As Object, e As DragEventArgs) _
Handles MyBase.DragOver, DataGridView1.DragOver
' --- ドロップ時の効果を Copy とする
e.Effect = DragDropEffects.Copy
End Sub
' ---● frm_Main: DragDrop ドロップ
Private Sub frm_Main_DragDrop(ByVal sender As Object, ByVal e As DragEventArgs) _
Handles MyBase.DragDrop, DataGridView1.DragDrop
' ---
Me.DataGridView1.Rows.Clear() ' -- DGV クリア
' --- ファイル名配列の内容を DGV に格納
For idx = 0 To Me.AryFileName.Count - 1
Me.DataGridView1.Rows.Add()
Me.DataGridView1(0, idx).Value = Me.AryFileName(idx)
Next
Me.DataGridView1.ClearSelection() ' -- 選択をクリア
End Sub
' ---[関数]ドラッグされたものがフォルダーかファイルかを判別
Private Function fnc_FileSystemType(ByVal drags() As String) As String
If (System.IO.File.Exists(drags(0)) = True) Then
Return "File"
ElseIf (System.IO.Directory.Exists(drags(0)) = True) Then
Return "Folder"
Else
Return "None"
End If
End Function
サンプル DGV_DragDrop.zip のダウンロードはここから・・・
コード全体、フォームなどすべてを含んでいます。
なお、このサンプルは実際に作成・公開しているソフトの一部です。
できるだけ枝葉を切り落としているつもりですが、
余分なコードがあるかも知れません。
もっとスマートなコードにすることができるかもしれません。
良いコードを発見されたら、ぜひご一報くださるようお願いいたします。
# 開発環境は Visual Studio です。
個人や学生さんなら Visual Studio Community が使えます(無償です)。
ここからダウンロードできます。
---------------------------------------------------------
ブログ記事についてのお問い合わせは「質疑応答 掲示板」で・・・
# ご質問にはできる限りお答えしています。
ただし、お名前(本名の姓 and/or 名)を書いていただいた場合に限らせていただきます。
ここをクリックして、北窓舎のサイトにもお立ち寄りください・・・
Windows Form などで DataGridView が使えます。
これは、Excel のような表(行・列)ですが、
列(セル)にはテキストだけではなく、画像・ボタン・チェックボックス・コンボボックスなどが使えます。
一覧表的なものを表現するにはとても便利なコントロールです。
さて、本ネタでは ファイルまたはフォルダーをドラッグ&ドロップして
DataGridView にファイル一覧を表示するサンプルをご紹介。
動きはこんな感じです・・・
ドラッグ&ドロップ部分のコードは次のとおり。
(読みやすさのため、半角スペースを全角に置き換えています)
' ---● frm_Main: DragEnter
Private Sub MyBase_DragEnter(sender As Object, e As DragEventArgs) _
Handles MyBase.DragEnter, DataGridView1.DragEnter
' --- ドラッグ中のファイルやディレクトリの取得
Dim Drags() As String = CType(e.Data.GetData(DataFormats.FileDrop), String())
' --- フォルダーかファイルかを判別(FileSystemType)
Me.FsType = Me.fnc_FileSystemType(Drags)
' --- fsType に応じた処理
Select Case Me.FsType
Case = "File"
' ---▼ ファイルの場合
Me.TextBox1.Text = "ファイル"
For idx = 0 To Drags.Count - 1
ReDim Preserve Me.AryFileName(idx)
Me.AryFileName(idx) = Drags(idx)
Next
Case = "Folder"
' ---▼ フォルダーの場合
Me.TextBox1.Text = "フォルダー"
Me.AryFileName = System.IO.Directory.GetFiles _
(Drags(0), "*", System.IO.SearchOption.TopDirectoryOnly)
Case Else
Exit Sub ' -- ファイルでもフォルダーでもなければ,処理を抜ける
End Select
' --- ドロップ時にコピーを可能にする
e.Effect = DragDropEffects.Copy
End Sub
' ---● frm_Main: DragOver
Private Sub frm_Main_DragOver(sender As Object, e As DragEventArgs) _
Handles MyBase.DragOver, DataGridView1.DragOver
' --- ドロップ時の効果を Copy とする
e.Effect = DragDropEffects.Copy
End Sub
' ---● frm_Main: DragDrop ドロップ
Private Sub frm_Main_DragDrop(ByVal sender As Object, ByVal e As DragEventArgs) _
Handles MyBase.DragDrop, DataGridView1.DragDrop
' ---
Me.DataGridView1.Rows.Clear() ' -- DGV クリア
' --- ファイル名配列の内容を DGV に格納
For idx = 0 To Me.AryFileName.Count - 1
Me.DataGridView1.Rows.Add()
Me.DataGridView1(0, idx).Value = Me.AryFileName(idx)
Next
Me.DataGridView1.ClearSelection() ' -- 選択をクリア
End Sub
' ---[関数]ドラッグされたものがフォルダーかファイルかを判別
Private Function fnc_FileSystemType(ByVal drags() As String) As String
If (System.IO.File.Exists(drags(0)) = True) Then
Return "File"
ElseIf (System.IO.Directory.Exists(drags(0)) = True) Then
Return "Folder"
Else
Return "None"
End If
End Function
サンプル DGV_DragDrop.zip のダウンロードはここから・・・
コード全体、フォームなどすべてを含んでいます。
なお、このサンプルは実際に作成・公開しているソフトの一部です。
できるだけ枝葉を切り落としているつもりですが、
余分なコードがあるかも知れません。
もっとスマートなコードにすることができるかもしれません。
良いコードを発見されたら、ぜひご一報くださるようお願いいたします。
# 開発環境は Visual Studio です。
個人や学生さんなら Visual Studio Community が使えます(無償です)。
ここからダウンロードできます。
---------------------------------------------------------
ブログ記事についてのお問い合わせは「質疑応答 掲示板」で・・・
# ご質問にはできる限りお答えしています。
ただし、お名前(本名の姓 and/or 名)を書いていただいた場合に限らせていただきます。
ここをクリックして、北窓舎のサイトにもお立ち寄りください・・・