private void treeView_Jia_DragEnter(object sender, DragEventArgs e)
        {
            this.textBox1.Text = e.X.ToString() + "--" + e.Y.ToString();
            TreeNode myNode = (TreeNode)(e.Data.GetData(typeof(TreeNode)));
            if (e.Data.GetDataPresent(typeof(TreeNode)))
            {
                if (((TreeNode)(myNode.Clone())).Nodes.Count > 0)  //判断 移动的不是跟节点
                    e.Effect = DragDropEffects.None;
                else
                {                 
                    TreeNode DropNode = this.treeView_Jia.GetNodeAt(e.X, e.Y);//这里的坐标就是鼠标第一次进入控件的位置    如何在这里修改 根据鼠标位置的变化 获取TreeNode节点信息呢??????               
                    // e.Effect = DragDropEffects.Copy;
                }
            }
            else
                e.Effect = DragDropEffects.None;
        }
各位大侠 主要是空色字体地方 要修改下  有什么好的建议??????

解决方案 »

  1.   

       你说的这个两个事件 都没问题   现在主要是DragEnter里面  我要判断下 选中的treenode不为空   在定义e.Effect 的状态
      

  2.   

    不为空指的是什么?treenode对象还是这个对象的属性
      

  3.   

       我在DragEnter 事件里面 
    通过这段代码(TreeNode DropNode = this.treeView_Jia.GetNodeAt(e.X, e.Y);)获取treenode对象 在根据treenode是否为空 判断  e.Effect 的状态(Copy或者None)   
       问题就是 这个e.X 和e.Y 是第一次进入控件的坐标    之后 在控件内 在移动鼠标  这个坐标值就不变化了.从而导致treenode对象一直没变化...
      

  4.   


            private void treeView1_MouseDown(object sender, MouseEventArgs e)
            {
                if (e.Button == System.Windows.Forms.MouseButtons.Left)
                {
                    this.treeView1.SelectedNode = treeView1.GetNodeAt(e.Location);
                    this.treeView1.DoDragDrop(this.treeView1.SelectedNode, DragDropEffects.All);
                }
            }        private void treeView1_DragEnter(object sender, DragEventArgs e)
            {
                if ((e.Data.GetDataPresent(typeof(TreeNode))))
                {
                    e.Effect = DragDropEffects.All;
                }
            }        private void treeView1_DragDrop(object sender, DragEventArgs e)
            {
    //因为这里的x,y坐标是全局的,所以要转换一下。
                Point newLocation = treeView1.PointToClient(new Point(e.X, e.Y));
                TreeNode targetNode = this.treeView1.GetNodeAt(newLocation);            TreeNode tn = e.Data.GetData(typeof(TreeNode)) as TreeNode;            if (targetNode == tn)
                    return;            tn.Parent.Nodes.Remove(tn);            targetNode.Nodes.Add(tn);
            }写了个简单的demo你参考一下。
      

  5.   

    我这个demo完全实现了节点的拖拽,不知道你的具体问题是什么,我反正是没看明白。
      

  6.   

      多谢.....根据你的demo  稍微修改了下   实现了自己想要的效果....