北の窓から(芦田っち)

PC関連と私的雑感のブログ。
2015年7月10日、カッコ内に名前を加えました。昔の友だちに気付いてほしくて・・・

【VB.NET】DataGridView - ドラッグ&ドロップ(サンプル・ダウンロード可能)

2020-05-25 09:00:43 | VB.NET
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 名)を書いていただいた場合に限らせていただきます。


ここをクリックして、北窓舎のサイトにもお立ち寄りください・・・

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 【VB.NET】DataGridView - コ... | トップ | 【VB.NET】ドラッグ&ドロッ... »
最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

VB.NET」カテゴリの最新記事