我有一个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;
}
}
答案 0 :(得分:4)
好吧,我发现自己解决了这个问题:
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
richTextBox1.EnableAutoDragDrop = true;
}
}
仅此而已。
我的第一次尝试基于MSDN文档: http://msdn.microsoft.com/en-us/library/aa984395(v=vs.71).aspx,但它好像坏了。
答案 1 :(得分:2)
在RXBox(RichTextBox)中拖放文本:
在Initialize()期间运行HookOn_EventHandlers_etc()。拖动鼠标将触发DragEnter和DragDrop事件。在RXBox_DragDrop()中,将DragDropEffects设置回None。
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
}