C#将treeview节点拖入richtextbox的方法

我开发PLC-Recorder的时候要将treeview节点拖入richtextbox。开始是拖入textbox,没有遇到什么问题,后来想如果插入点能随着鼠标移动就好了,并且以后可能要给部分文本改变颜色,于是就选择了强大的richtextbox,不曾想richtextbox根本就没有类似于textbox那样的拖拽属性和事件。
于是百度,第一个结论是这些属性和事件隐藏了,要自己写。照猫画虎,能够拖拽了,但是,到了richtextbox后,显示禁止标志,并且不会调用richTextBox1_DragDrop()事件,网友的各种设置建议好像都不灵,经过很长的摸索,终于发现了门道:在拖拽起点时,要选择.Move效果,另外,要选择文本模式。richtextbox里不需要做任何特殊设置,就可以完美实现拖拽功能。
C#将treeview节点拖入richtextbox的方法_第1张图片
看代码吧:

 public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            //属性面板上没有AllowDrop属性,需要通过程序写
            richTextBox1.AllowDrop = true;
            //事件面板上没有richTextBox拖放事件,需要通过程序写事件委托
            richTextBox1.DragEnter += new DragEventHandler(richTextBox1_DragEnter);
            richTextBox1.DragDrop += new DragEventHandler(richTextBox1_DragDrop);           
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            TreeNode tn = new TreeNode();
            tn.Text = "树节点";
            treeView1.Nodes.Add(tn);
        }
        private void richTextBox1_DragDrop(object sender, DragEventArgs e)
        {
            string s1= (string)e.Data.GetData(DataFormats.Text);
            richTextBox1.SelectedText = s1;
        }

        private void richTextBox1_DragEnter(object sender, DragEventArgs e)
        {
            e.Effect = DragDropEffects.Move;
        }

        private void treeView1_ItemDrag(object sender, ItemDragEventArgs e)
        {
            TreeNode tn = (TreeNode)e.Item;
            DoDragDrop(tn.Text, DragDropEffects.Move);//这个要选择文本,且用Move效果。这是最关键的地方。
        }
    }

2020年7月31日

你可能感兴趣的:(编程,c#)