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

更新 : 2007 年 11 月

Windows フォームの RichTextBox コントロールにおけるドラッグ アンド ドロップ操作は、DragEnter イベントと DragDrop イベントを処理することによって実行されます。そのため、RichTextBox コントロールではドラッグ アンド ドロップ操作がきわめて単純です。

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

  1. RichTextBox コントロールの AllowDrop プロパティを 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(Object sender,
    System.Windows.Forms.DragEventArgs e)
    {
       if (e.get_Data().GetDataPresent(DataFormats.Text))
          e.set_Effect(DragDropEffects.Copy);
       else
          e.set_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 J#、および Visual C++) フォームのコンストラクタに次のコードを挿入してイベント ハンドラを登録します。

    this.richTextBox1.DragEnter += new
        System.Windows.Forms.DragEventHandler
        (this.richTextBox1_DragEnter);
    
    this.richTextBox1.add_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 メソッドを使用して、ドラッグされたデータを取得します。

    RichTextBox コントロールの Text プロパティをドラッグされたデータと同じ内容に設定する例を次に示します。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 void richTextBox1_DragDrop(Object sender,
    System.Windows.Forms.DragEventArgs e)
    {
       int i;
       String s;
    
       // Get start position to drop the text.
       i = richTextBox1.get_SelectionStart();
       s = richTextBox1.get_Text().Substring(i);
       richTextBox1.set_Text(richTextBox1.get_Text().Substring(0, i));
    
       // Drop the text on to the RichTextBox.
       richTextBox1.set_Text(richTextBox1.get_Text() +
          e.get_Data().GetData(DataFormats.Text).ToString());
       richTextBox1.set_Text(richTextBox1.get_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 J#、および Visual C++) フォームのコンストラクタに次のコードを挿入してイベント ハンドラを登録します。

    this.richTextBox1.DragDrop += new
        System.Windows.Forms.DragEventHandler
        (this.richTextBox1_DragDrop);
    
    this.richTextBox1.add_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 コントロール内に挿入されます。

参照

処理手順

方法 : アプリケーション間でドラッグ アンド ドロップ操作を実行する

参照

RichTextBox

その他の技術情報

RichTextBox コントロール (Windows フォーム)

Windows フォームで使用するコントロール