ドラッグアンドロップ対応するソフトの作り方のまとめです。ドラッグアンドロップを使うと、ファイルエクスプローラーなどで見つけたファイルをそのままアプリにもっていって処理できるので非常に直感的に操作できる点がメリットです。
フォーム上のドラッグアンドドロップでファイルを取得する
フォームや部品上でドラッグアンドドロップのファイルを取得します。
設定
フォームにそのままドロップしたい場合にはフォームの「AllowDrop」プロパティを「True」にします。これでフォームへのドラッグアンドロップイベントが発生するようになります。
次にDragDropイベントを選びます。
ソース
後は以下のように取得したファイルを調べます。
ドラッグアンドロップでは複数のファイルがドロップされる可能性があるため、調べたファイルの配列をすべてチェックしておきましょう。
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;
}
アプリへの直接ドラッグアンドドロップのファイルを取得する
ウィンドウズデスクトップ上でファイルをドラッグアンドドロップした場合にファイル名を取得します。
この場合、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");
}
}
いまのところ、インストーラで作ったデスクトップのショートカットにはファイルのドラッグアンドドロップがうまくいかないので調査中です。