方法: Windows フォームの RichTextBox コントロールにおけるドラッグ アンド ドロップ操作を有効にする

Windows フォームでのドラッグ アンド ドロップ操作の RichTextBox コントロールは、 DragEnter および DragDrop イベントを処理すると実行されます。 そのため、ドラッグ アンド ドロップの操作は RichTextBox コントロールを使用すると非常にシンプルです。

RichTextBox コントロールでドラッグ操作を有効にするには

  1. AllowDrop プロパティの RichTextBox コントロールを trueに設定します。

  2. DragEnter イベントのイベント ハンドラーで適切なコードを作成します。 if ステートメントを使用して、ドラッグされるデータが適切な型 (この場合はテキスト) であることを確認します。 DragEventArgs.Effect プロパティは、いずれかの DragDropEffects 列挙値に設定できます。

    Private Sub RichTextBox1_DragEnter(ByVal sender As Object, _
       ByVal e As System.Windows.Forms.DragEventArgs) _
       Handles RichTextBox1.DragEnter  
       If (e.Data.GetDataPresent(DataFormats.Text)) Then  
          e.Effect = DragDropEffects.Copy  
       Else  
          e.Effect = DragDropEffects.None  
       End If  
    End Sub  
    
    private void richTextBox1_DragEnter(object sender,
    System.Windows.Forms.DragEventArgs e)  
    {  
       if (e.Data.GetDataPresent(DataFormats.Text))
          e.Effect = DragDropEffects.Copy;  
       else  
          e.Effect = DragDropEffects.None;  
    }  
    
    private:  
       void richTextBox1_DragEnter(System::Object ^  sender,  
          System::Windows::Forms::DragEventArgs ^  e)  
       {  
          if (e->Data->GetDataPresent(DataFormats::Text))  
             e->Effect = DragDropEffects::Copy;  
          else  
             e->Effect = DragDropEffects::None;  
       }  
    

    (Visual C# および Visual C++) フォームのコンストラクターに次のコードを配置して、イベント ハンドラーを登録します。

    this.richTextBox1.DragEnter += new  
        System.Windows.Forms.DragEventHandler  
        (this.richTextBox1_DragEnter);  
    
    this->richTextBox1->DragEnter += gcnew  
       System::Windows::Forms::DragEventHandler  
       (this, &Form1::richTextBox1_DragEnter);  
    
  3. DragDrop イベントを処理するコードを記述します。 DataObject.GetData メソッドを使用してドラッグされるデータを取得します。

    次の例では、コードは、ドラッグされるデータに相当する Text コントロールの RichTextBox のプロパティを設定します。 RichTextBox コントロール内にすでにテキストがある場合、ドラッグされたデータが挿入ポイントに挿入されます。

    Private Sub RichTextBox1_DragDrop(ByVal sender As Object, _
       ByVal e As System.Windows.Forms.DragEventArgs) _
       Handles RichTextBox1.DragDrop  
       Dim i As Int16
       Dim s As String  
    
       ' Get start position to drop the text.  
       i = RichTextBox1.SelectionStart  
       s = RichTextBox1.Text.Substring(i)  
       RichTextBox1.Text = RichTextBox1.Text.Substring(0, i)  
    
       ' Drop the text on to the RichTextBox.  
       RichTextBox1.Text = RichTextBox1.Text + _  
          e.Data.GetData(DataFormats.Text).ToString()  
       RichTextBox1.Text = RichTextBox1.Text + s  
    End Sub  
    
    private void richTextBox1_DragDrop(object sender,
    System.Windows.Forms.DragEventArgs e)  
    {  
       int i;  
       String s;  
    
       // Get start position to drop the text.  
       i = richTextBox1.SelectionStart;  
       s = richTextBox1.Text.Substring(i);  
       richTextBox1.Text = richTextBox1.Text.Substring(0,i);  
    
       // Drop the text on to the RichTextBox.  
       richTextBox1.Text = richTextBox1.Text +
          e.Data.GetData(DataFormats.Text).ToString();  
       richTextBox1.Text = richTextBox1.Text + s;  
    }  
    
    private:  
       System::Void richTextBox1_DragDrop(System::Object ^  sender,  
          System::Windows::Forms::DragEventArgs ^  e)  
       {  
          int i;  
          String ^s;  
    
       // Get start position to drop the text.  
       i = richTextBox1->SelectionStart;  
       s = richTextBox1->Text->Substring(i);  
       richTextBox1->Text = richTextBox1->Text->Substring(0,i);  
    
       // Drop the text on to the RichTextBox.  
       String ^str = String::Concat(richTextBox1->Text, e->Data  
       ->GetData(DataFormats->Text)->ToString());
       richTextBox1->Text = String::Concat(str, s);  
       }  
    

    (Visual C# および Visual C++) フォームのコンストラクターに次のコードを配置して、イベント ハンドラーを登録します。

    this.richTextBox1.DragDrop += new  
        System.Windows.Forms.DragEventHandler  
        (this.richTextBox1_DragDrop);  
    
    this->richTextBox1->DragDrop += gcnew
       System::Windows::Forms::DragEventHandler  
       (this, &Form1::richTextBox1_DragDrop);  
    

アプリケーションでドラッグ アンド ドロップ機能をテストするには

  1. アプリケーションを保存し、ビルドします。 実行中にワードパッドを起動します。

    ワードパッドは、Windows によってインストールされるテキスト エディターであり、ドラッグ アンド ドロップ操作をサポートします。 ワードパッドを起動するには、 [スタート] ボタンをクリックし、 [ファイル名を指定して実行]を選択し、 WordPad [ファイル名を指定して実行] ダイアログ ボックスのテキスト ボックスに「 」と入力し、 [OK]をクリックします。

  2. ワードパッドが起動したら、テキストの文字列を入力します。 マウスを使用してテキストを選択し、選択したテキストを Windows アプリケーションの RichTextBox コントロールにドラッグします。

    マウスを RichTextBox コントロールに移動すると (そして、その結果 DragEnter イベントが発生すると)、マウス ポインターの形が変化し、選択したテキストを RichTextBox コントロールにドロップできます。

    マウス ボタンを放すと、選択したテキストがドロップ (つまり DragDrop イベントが発生) し、 RichTextBox コントロール内に挿入されます。

関連項目