C#でドロップされたファイルの名前を得る(WPF編 PreviewDragOver版)
ファイルをドロップすることでそのファイル名を取得できると、ファイル名の入力が楽になります。テキストボックスにファイルをドロップする場合、Window Formアプリでの方法とWPFアプリでの方法が異なります。
目次
WPFアプリを作って試してみました
シナリオ
フォームにテキストボックスを1つ貼り付けて、そこにエクスプローラーからファイルをドロップすると、そのファイルの名前を表示してみます。
レイアウトを作る
まず、フォームにテキストボックスを1つドロップして適当な大きさにします。次に、そのテキストボックスのAcceptsReturnプロパティをtrueにして、複数行表示できるようにします。そして、テキストボックスのAllowDropプロパティをtrueにして、ドロップできるようにします。
コードを書く
テキストボックスを選択して、プロパティウィンドウの「雷」のマークをクリックすると、テキストボックスのイベントが表示されます。その中から、PreviewDragOverイベントの入力欄をダブルクリックすると、コードウィンドウの方にそのイベントの空のコードが自動的に記述されます。 そこに、下記のように記述します。
private void textBox_PreviewDragOver(object sender, DragEventArgs e)
{
e.Effects = DragDropEffects.Copy; // マウスカーソルをコピーにする。
e.Handled = e.Data.GetDataPresent(DataFormats.FileDrop); // ドラッグされてきたものがFileDrop形式の場合だけ、このイベントを処理済みにする。
}
これで、テキストボックスの上にドラッグしたときに、カーソルの形状が変わり、ドロップを受け入れられるようになります。 次に、同様にDropイベントにコードを記述します。
private void textBox_Drop(object sender, DragEventArgs e)
{
textBox.Text = string.Empty; // テキストボックスを空にする。
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop); // ドロップされたものがFileDrop形式の場合は、各ファイルのパス文字列を文字列配列に格納する。
if (files != null)
{
foreach (string uriString in files)
{
textBox.Text = textBox.Text + System.IO.Path.GetFileName(uriString) + "\r\n"; // パス文字列からファイル名を抜き出して、テキストボックスにファイル名を書き込む。
}
}
}
公開日
広告
C#の入出力カテゴリの投稿
- C#でCSVファイルを読み込んでコレクションに入れてみた
- C#でInputBoxを使ってみた
- C#で「名前を付けて保存」ダイアログを使ってみた
- C#でクリップボードから文字列を取得する
- C#でクリップボードにデータを入れる
- C#でコマンドライン引数を取得する
- C#でテキストファイルを読んでみた (File.ReadAllText編)
- C#でドロップされたファイルの名前を得る(WPF編 DragOver版)
- C#でドロップされたファイルの名前を得る(WPF編 PreviewDragOver版)
- C#でドロップされたファイルの名前を得る(Windowフォーム編)
- C#でパイプを使ってデータを入力してみる
- C#でメッセージボックスを使う