关于 DragEnter事件几个小问题

巴掌锅 2012-12-10 11:26:54
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;
}




各位大侠 主要是空色字体地方 要修改下 有什么好的建议??????
...全文
392 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
巴掌锅 2012-12-11
  • 打赏
  • 举报
回复
引用 8 楼 haukwong 的回复:
引用 7 楼 hl_net 的回复: 大家伙....我的问题还没解决..... 我表述的问题不够明确??还是其他原因??? 我这个demo完全实现了节点的拖拽,不知道你的具体问题是什么,我反正是没看明白。
多谢.....根据你的demo 稍微修改了下 实现了自己想要的效果....
巴掌锅 2012-12-10
  • 打赏
  • 举报
回复
引用 4 楼 porenasckx 的回复:
不为空指的是什么?treenode对象还是这个对象的属性
我在DragEnter 事件里面 通过这段代码(TreeNode DropNode = this.treeView_Jia.GetNodeAt(e.X, e.Y);)获取treenode对象 在根据treenode是否为空 判断 e.Effect 的状态(Copy或者None) 问题就是 这个e.X 和e.Y 是第一次进入控件的坐标 之后 在控件内 在移动鼠标 这个坐标值就不变化了.从而导致treenode对象一直没变化...
E次奥 2012-12-10
  • 打赏
  • 举报
回复
不为空指的是什么?treenode对象还是这个对象的属性
巴掌锅 2012-12-10
  • 打赏
  • 举报
回复
引用 2 楼 porenasckx 的回复:
拖拽的时候,应该是鼠标单击下去后获得鼠标下的元素,然后拖动,最后放置的时候获取鼠标下元素的位置,最后将鼠标拖拽的元素放置。 用命中测试即可获得鼠标下的元素。
你说的这个两个事件 都没问题 现在主要是DragEnter里面 我要判断下 选中的treenode不为空 在定义e.Effect 的状态
E次奥 2012-12-10
  • 打赏
  • 举报
回复
拖拽的时候,应该是鼠标单击下去后获得鼠标下的元素,然后拖动,最后放置的时候获取鼠标下元素的位置,最后将鼠标拖拽的元素放置。 用命中测试即可获得鼠标下的元素。
巴掌锅 2012-12-10
  • 打赏
  • 举报
回复
怎嘛木人呢???? 俺第一次尝试求贴 不会就这么沉了吧.... 各位
Hauk 2012-12-10
  • 打赏
  • 举报
回复
引用 7 楼 hl_net 的回复:
大家伙....我的问题还没解决..... 我表述的问题不够明确??还是其他原因???
我这个demo完全实现了节点的拖拽,不知道你的具体问题是什么,我反正是没看明白。
巴掌锅 2012-12-10
  • 打赏
  • 举报
回复
大家伙....我的问题还没解决..... 我表述的问题不够明确??还是其他原因???
Hauk 2012-12-10
  • 打赏
  • 举报
回复

        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你参考一下。

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧