Visual C# アプリケーションにファイルのドラッグ アンド ドロップ機能を提供する方法


Microsoft Visual Basic .NET を使用する場合は、306969 をご覧ください。

この資料の内容

概要


この資料では、Visual C# アプリケーションにファイルのドラッグ アンド ドロップ機能を提供する方法について手順を追って説明します。 ファイルのドラッグ アンド ドロップ先には ListBox コントロールが使用されています。


必要条件

必要なハードウェア、ソフトウェア、ネットワーク インフラストラクチャ、および Service Pack は次のとおりです。

  • Visual C#
この資料は、次のトピックについて詳しい知識のあるユーザーを対象としています。

  • Windows フォームの ListBox コントロール
  • Windows フォームのイベント処理

サンプル プロジェクトをビルドする

ListBox コントロールには、ユーザーが処理する必要のある 2 つのドラッグ アンド ドロップ イベント DragEnterDragDrop が用意されています。 DragEnter イベントは、コントロールの境界内にオブジェクトをドラッグしたときに発生し、ドラッグ中のオブジェクトをそのコントロール上にドロップできるかどうかを判定するために使用します。 コントロール上にファイルがドラッグされた場合にこのイベントを処理します。 このイベントを使用すると、オブジェクトがコントロール上にドラッグされたときに、ドラッグされたオブジェクトに応じて適切なアイコンを表示できます。 DragDrop イベントは、ドラッグされたオブジェクトがコントロール上で解放されたときに発生します。 このイベントを処理してオブジェクトを取得します。 データの取得には、Data オブジェクトを使用します。

Data オブジェクトの GetData メソッドは、ListBox コントロールにドラッグされたファイルの完全なパス名を含む文字列の配列を返します。 このファイル パス情報を使用して、ファイルに対して必要な操作を実行できます。 たとえば、System.IO 名前空間内のクラスを使用すると、ファイルを開いて読み取る、ファイルを移動する、ファイルを別の場所にコピーするなどの操作を実行できます。 このサンプルでは、単に、ListBox コントロールにドラッグされたファイルの完全なパスを追加します。

Visual C# アプリケーションでファイルのドラッグ アンド ドロップ機能を提供するには、以下の手順を実行します。
  1. Visual C# .NET または Visual C# 2005 で新しい Windows フォーム アプリケーションを作成します。 デフォルトで Form1 が作成されます。
  2. ツールボックスを使用して Form1 に ListBox コントロールを 1 つ追加します。
  3. [プロパティ] ウィンドウで ListBox コントロールの AllowDrop プロパティを True に変更し、オブジェクトをコントロール上にドラッグできるようにします。
  4. ソリューション エクスプローラーで [Form1.cs] を右クリックし、[コードの表示] をクリックします。
  5. DragEnter イベントを処理するには、Windows フォーム デザイナーが Form1 クラスに生成したコード セクションの後に次のメソッドを追加します。
    private void listBox1_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)
    {
    if(e.Data.GetDataPresent(DataFormats.FileDrop))
    e.Effect = DragDropEffects.All;
    else
    e.Effect = DragDropEffects.None;
    }
  6. DragDrop イベントを処理するには、手順 5. で Form1 クラスに追加したメソッドの直後に次のメソッドを追加します。
    private void listBox1_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
    {
    string[] s = (string[]) e.Data.GetData(DataFormats.FileDrop, false);
    int i;
    for(i = 0; i < s.Length; i++)
    listBox1.Items.Add(s[i]);
    }
  7. この 2 つのイベント ハンドラーをコントロールのイベントと関連付けるには、Form1 のコンストラクターで InitializeComponent の呼び出しの後に次のコードを追加します。
    this.listBox1.DragDrop += new
    System.Windows.Forms.DragEventHandler(this.listBox1_DragDrop);
    this.listBox1.DragEnter += new
    System.Windows.Forms.DragEventHandler(this.listBox1_DragEnter);

  8. プロジェクトをビルドして実行します。
  9. ファイルをデスクトップまたは別のフォルダーから ListBox コントロールにドラッグします。 ファイルの完全なパスが ListBox コントロールに追加されます。

関連情報


詳細については、以下の MSDN (Microsoft Developer Network) Web サイトを参照してください。