C#在RichTextBox中拖放文本

C#在RichTextBox中拖放文本,c#,winforms,drag-and-drop,richtextbox,C#,Winforms,Drag And Drop,Richtextbox,我有一个C#项目,我希望用户能够在WinForm中的RichTextBox中拖放文本(即移动文本) 我发现了很多例子,展示了如何将一些东西放到RichTextBox上,但是当RichTextBox既是拖放源又是拖放目标时,我没有成功地让它们工作 我该怎么做 下面是我迄今为止的非工作尝试 public partial class Form1 : Form { public Form1() { InitializeComponent(); this.richT

我有一个C#项目,我希望用户能够在WinForm中的RichTextBox中拖放文本(即移动文本)

我发现了很多例子,展示了如何将一些东西放到RichTextBox上,但是当RichTextBox既是拖放源又是拖放目标时,我没有成功地让它们工作

我该怎么做

下面是我迄今为止的非工作尝试

public partial class Form1 : Form {
    public Form1() {
        InitializeComponent();
        this.richTextBox1.AllowDrop = true;
        this.richTextBox1.DragEnter += new System.Windows.Forms.DragEventHandler(this.richTextBox1_DragEnter);
        this.richTextBox1.DragDrop += new System.Windows.Forms.DragEventHandler(this.richTextBox1_DragDrop);
    }

    private void richTextBox1_DragEnter(object sender, System.Windows.Forms.DragEventArgs e) {
        if (e.Data.GetDataPresent(DataFormats.Rtf))
            e.Effect = DragDropEffects.Move;
        else
            e.Effect = DragDropEffects.None;
    }
    private void richTextBox1_DragDrop(object sender, System.Windows.Forms.DragEventArgs e) {
        int i;
        String s;

        i = richTextBox1.SelectionStart;
        s = richTextBox1.Text.Substring(i);
        richTextBox1.Text = richTextBox1.Text.Substring(0, i);

        richTextBox1.Text = richTextBox1.Text +
           e.Data.GetData(DataFormats.Text).ToString();
        richTextBox1.Text = richTextBox1.Text + s;
    }
}

我找到了解决这个问题的办法:

public partial class Form1 : Form {
    public Form1() {
        InitializeComponent();
        richTextBox1.EnableAutoDragDrop = true;
    }
}
没别的了

我的第一次尝试基于MSDN文档:
,但它似乎已损坏。

在RXBox(RichTextBox)中拖放文本:

在初始化()期间运行HookOn\u EventHandlers\u etc()。拖动鼠标将触发DragEnter和DragDrop事件。在RXBox_DragDrop()中,将DragDropEffects设置回无

    private void HookOnEventHandlers_etc()
    {
        RXBox.DragEnter += RXBox_DragEnter;
        RXBox.DragDrop += RXBox_DragDrop;

        RXBox.AllowDrop = true;
        RXBox.EnableAutoDragDrop = true;
    }

    private void RXBox_DragEnter(object sender, DragEventArgs e)
    {
        if (e.Data.GetDataPresent(DataFormats.Text))
            e.Effect = DragDropEffects.Copy;
        else
            e.Effect = DragDropEffects.None;
    }

    private void RXBox_DragDrop(object sender, DragEventArgs e)
    {
        RXBox.SelectedText = e.Data.GetData(DataFormats.Text).ToString();
        e.Effect = DragDropEffects.None; // with this the paste won't be doubled
    }

你可能正在重新发明轮子。请参阅FastColoredTextBox并非基于RichTextBox的优点,但您可以通过将
RXBox.SelectedText
替换为
((RichTextBox)sender)进行改进。在事件
RXBox\u DragDrop