C#でドロップされたファイルの名前を得る(Windowフォーム編)

ツールを作っていると操作するファイルを指定してもらう場面が出てきませんか。そういう場合、エクスプローラーからファイルをドロップ出来るようにすると、使い勝手が良いですよね。 ググってみたら、そのものずばりなページがありました。誰でもやりたいことは同じなんですね。ちょっとアレンジして、テキストボックスにドロップするようにしてみました。

テキストボックスにドロップしたファイルのファイル名を表示する

上記サイトの例ではリストボックスにファイルを表示させてましたが、テキストボックスに表示するようにしてみます。 まず、FormにTextBoxを貼り付けて、TextBoxのAllowDropプロパティをTrueに変更します。 151114-2-00 次に、ドラッグしたポインタがTextBoxの上に来たときにポインタアイコンを変更するために、TextBoxのDragEnterイベントにコードを追加します。「デザイン」ウィンドウのTextBoxを選択した状態で「プロパティ」ウィンドウのイベントアイコン(雷マークのアイコン)を押すと、プロパティウィンドウにTextBoxのイベントが表示されます。 151114-2-01 ここで「DragEnter」をダブルクリックすると、コードウインドウに下記が追加されますので、ここにコードを書いていきます。 151114-2-02 DragEventArgs.EffecプロパティDragDropEffects列挙体のCopyを設定します。

private void textBox1_DragEnter(object sender, DragEventArgs e)
{
    e.Effect = DragDropEffects.Copy; // マウスポインタのアイコンを変更する
}

同様に、ファイル名を取得してTextBoxに表示するコードをTextBoxのDragDropイベントに記述します。

private void textBox1_DragDrop(object sender, DragEventArgs e)
{
    textBox1.Text = string.Empty; // TextBoxの中身をクリア
    if (e.Data.GetDataPresent(DataFormats.FileDrop))
    {
        foreach (string filename in (string[])e.Data.GetData(DataFormats.FileDrop))
        {
            textBox1.Text = textBox1.Text + filename + "; ";
        }
    }
}

if (DragEventArgs.Data.GetDataPresent(DataFormats.FileDrop)) { };で、ドロップしたデータがファイルかどうかを判断します。その後、foreachでファイル名を取り出してTextBoxに追記していきます。 実行してみると、下図の様になります。3つのファイルをドロップした例です。 151114-2-03 これで、ファイルの選択を簡単にできるようになりました。

公開日

広告