【C#】指定した拡張子のファイルがドラッグアンドドロップされたらパスを取得

C#

この記事では、テキストファイル(拡張子.txt)をアプリケーションのフォームにドラッグ&ドロップして、ドロップされたファイルのパスを取得する簡単な例を紹介します。

サンプルコード

まずはフォームにファイルのドロップを許可します。プロパティでAllowDropをTrueに設定します。

フォームにDragEnterとDragDropのイベントハンドラを追加します。

その後、イベントハンドラの内容を以下のように書き換えてください。
※この例では、分かりやすさ重視のためドラッグアンドドロップの対象ファイル数を1個に固定しています。複数ファイルに対応したい場合は、filesの処理を適宜変更ください。

DragEnterのイベントハンドラ

private void Form1_DragEnter(object sender, DragEventArgs e)
{
	// ドラッグされたデータはファイル形式か
	if (e.Data.GetDataPresent(DataFormats.FileDrop))
	{
		// 拡張子が.txtの場合はマウスアイコンを変更
		string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
		if (Path.GetExtension(files[0]).ToLower() == ".txt")
		{
			e.Effect = DragDropEffects.Copy;
		}
		else
		{
			e.Effect = DragDropEffects.None;
		}
	}
	else
	{
		e.Effect = DragDropEffects.None;
	}
}

DragDropのイベントハンドラ

private void Form1_DragDrop(object sender, DragEventArgs e)
{
	// ドロップされたファイルを取得
	string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
	if (files != null && files.Length > 0)
	{
		// 拡張子が.txtの場合は処理する
		string filePath = files[0];
		if (Path.GetExtension(files[0]).ToLower() == ".txt")
		{
			MessageBox.Show("ドロップされたファイルのパス:" + filePath);
		}
	}
}
タイトルとURLをコピーしました