방법: Windows Forms RichTextBox 컨트롤에서 끌어서 놓기 작업 사용
업데이트: 2007년 11월
Windows Forms RichTextBox 컨트롤에서 끌어서 놓기 작업은 DragEnter 및 DragDrop 이벤트를 처리하여 수행됩니다. 따라서 RichTextBox 컨트롤에서 끌어서 놓기 작업은 매우 간단합니다.
RichTextBox 컨트롤에서 끌기 작업을 사용하려면
RichTextBox 컨트롤의 AllowDrop 속성을 true로 설정합니다.
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);
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);
응용 프로그램에서 끌어서 놓기 기능을 테스트하려면
응용 프로그램을 저장하고 빌드합니다. 그런 다음 응용 프로그램이 실행되는 동안 워드패드를 엽니다.
워드패드는 Windows에서 설치하는 텍스트 편집기이며 끌어서 놓기 작업을 허용합니다. 시작 단추를 클릭하고 실행을 선택한 다음 실행 대화 상자의 텍스트 상자에 WordPad를 입력하고 확인을 클릭하면 워드패드를 열 수 있습니다.
워드패드가 열리면 텍스트 문자열을 입력합니다. 마우스를 사용하여 텍스트를 선택한 다음 이 텍스트를 Windows 응용 프로그램의 RichTextBox 컨트롤로 끌어 옵니다.
마우스로 RichTextBox 컨트롤을 가리켜 DragEnter 이벤트가 발생하면 선택한 텍스트를 RichTextBox 컨트롤에 놓을 수 있도록 마우스 포인터의 모양이 바뀝니다.
마우스 단추를 놓으면 DragDrop 이벤트가 발생하여 선택한 텍스트가 놓여지고 컨트롤에 이 텍스트가 RichTextBox 삽입됩니다.