クリエイターの教科書

Excel, ChatGPT, Stable Diffusion, Visual Studioなどの教科書

【Visual Studioの教科書】C#でドラッグアンドロップ対応するには?

ドラッグアンドロップ対応するソフトの作り方のまとめです。ドラッグアンドロップを使うと、ファイルエクスプローラーなどで見つけたファイルをそのままアプリにもっていって処理できるので非常に直感的に操作できる点がメリットです。

フォーム上のドラッグアンドドロップでファイルを取得する

277/366: Drag and drop

フォームや部品上でドラッグアンドドロップのファイルを取得します。

 

設定

フォームにそのままドロップしたい場合にはフォームの「AllowDrop」プロパティを「True」にします。これでフォームへのドラッグアンドロップイベントが発生するようになります。 

f:id:apicode:20210105180759p:plain

 

次にDragDropイベントを選びます。

f:id:apicode:20210105180905p:plain

 

ソース

後は以下のように取得したファイルを調べます。

ドラッグアンドロップでは複数のファイルがドロップされる可能性があるため、調べたファイルの配列をすべてチェックしておきましょう。

private void FormMain_DragDrop(object sender, DragEventArgs e)
{
 string files = (string)e.Data.GetData(DataFormats.FileDrop, false);
 for (int i = 0; i < files.Length; i++)
 {
  Console.Write(files[i]);
 }

 

次にDragEnterイベントを作ります。これはファイルをドラッグした段階でアイコンを変更します。これがないとドラッグアンドドロップに対応している感じがわかりにくいです。

if (e.Data.GetDataPresent(DataFormats.FileDrop)) {
 e.Effect = DragDropEffects.All;
}else {
 e.Effect = DragDropEffects.None;

 

 

アプリへの直接ドラッグアンドドロップのファイルを取得する

drag-and-drop

ウィンドウズデスクトップ上でファイルをドラッグアンドドロップした場合にファイル名を取得します。

 

この場合、Form1の作成関数である「public Form1」のなかで、「 System.Environment.GetCommandLineArgs();」からアプリを起動した引数を取得するとファイルがあれば取得できます。

 

public Form1()
{
 InitializeComponent();
 string[] files = System.Environment.GetCommandLineArgs();

 if (files.Length > 1)
 {

  for (int i = 1; i < files.Length; i++)
  {
   Console.WriteLine(files[i]);
  }
 }
 else
 {
  Console.WriteLine("no file");
 }
}

 

いまのところ、インストーラで作ったデスクトップのショートカットにはファイルのドラッグアンドドロップがうまくいかないので調査中です。

このブログは、ネットや書籍上の情報、個人の体験や感想を中心にまとめたものです。 正確性を期していはいますが、間違い・誤訳等あるかもしれません。 当サイトの情報によって生じたいかなる損失について一切の責任を負わないものとします. あらかじめご了承ください。

プライバシーポリシー |〇利用規約 |〇問い合わせ