RichTextBox与拖放

1.自动拖放只支持DragDropEffects.Move

近日需要程序在运行时将TreeView节点拖放到RichTextBox。发现RichTextBox没有DragOver等事件,但有EnableAutoDragDrop属性,于是设置为true。运行程序,可以从外部拖放一些文本、图片到RichTextBox,但是从TreeView拖放节点到RichTextBox时,老是显示类似禁止的那个小图标,无法拖放。难道RichTextBox对于内部拖放没有效果?

以下是TreeView点击开始拖放的代码

private void treeView1_MouseDown(object sender, MouseEventArgs e)
{
    TreeNode mNode= this.treeView1.GetNodeAt(e.X, e.Y);
    treeView1.SelectedNode = mNode;
    if (mNode != null)
        treeView1.DoDragDrop(mNode.Text, DragDropEffects.Copy);
}

增加一个TextBox来接受拖放。证明上面的代码是可以的。无聊之时,将

treeView1.DoDragDrop(mNode.Text, DragDropEffects.Copy);

修改为

treeView1.DoDragDrop(mNode.Text, DragDropEffects.Move);

奇迹发生了,可以拖放进去了。RichTextBox什么代码都不用写,只用设置EnableAutoDragDrop=true。看来RichTextBox的自动拖放只支持DragDropEffects.Move。

2.非自动的拖放(EnableAutoDragDrop=false)

其实RichTextBox设计器里没有DragOver等事件,但我们可以手工添加代码。需要注意的是,非自动也只支持DragDropEffects.Move.

this.richTextBox1.AllowDrop = true;
this.richTextBox1.DragEnter += new DragEventHandler(richTextBox1_DragEnter);
this.richTextBox1.DragDrop += new DragEventHandler(richTextBox1_DragDrop);

这样我们就可以自己来决定RichTextBox允许拖放的内容。设置EnableAutoDragDrop=false,以下方法限定RichTextBox只接受Text的拖放

void richTextBox1_DragDrop(object sender, DragEventArgs e)
{
    string txt = e.Data.GetData("Text") as string;
    if (!string.IsNullOrEmpty(txt))
        this.richTextBox1.SelectedText = txt;
}

void richTextBox1_DragEnter(object sender, DragEventArgs e)
{            
    if (e.Data.GetDataPresent("Text"))
        e.Effect = DragDropEffects.Move;//注意,也只支持Move
    else
        e.Effect = DragDropEffects.None;
}

转载于:https://www.cnblogs.com/kevin-Y/archive/2012/05/07/2487179.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值