不用控件构建Treeview 数的 问题? 随意拖动树的节点?100分

gggg747636 2009-01-13 02:27:46
Treeview 树 , 随意拖动树的节点, 拖到那个节点下面,就挂在哪个节点下面。


谢谢。。 给思路或源码都行。。。。。。。
...全文
176 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
gggg747636 2009-01-14
  • 打赏
  • 举报
回复
treeview 里面 没有这个事件吧, treeView1_DragDrop


给点注释啊。。 我这个东西不是很懂 ?


谢了
gggg747636 2009-01-14
  • 打赏
  • 举报
回复
多找找看, 没做过 这种 的
gggg747636 2009-01-14
  • 打赏
  • 举报
回复
知道的 , 帮帮忙咯
gggg747636 2009-01-14
  • 打赏
  • 举报
回复
那个web 的该怎么做了类。。 。。 给点意见或 源码咯 , 给源码的 顺便写点注释。。

谢谢。
ICanUseThisID 2009-01-14
  • 打赏
  • 举报
回复
我还以为是winform
gggg747636 2009-01-14
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 ICanUseThisID 的回复:]
dragdrop事件处理函数中有个bug,现改为如下,没详细测试,仅供参考:

C# code
private void treeView1_DragDrop(object sender, DragEventArgs e)
{
TreeNode fromNode = e.Data.GetData(typeof(TreeNode)) as TreeNode;
TreeNode toNode = treeView1.GetNodeAt(treeView1.PointToClient(new Point(e.X, e.Y)));

if (fromNode != null && toNode != null)

[/Quote]

我是 建的web 项目 , 我在treeview 的事件中没有看到你说的 那个 dragdrop事件

我的里面只有 这些事件的:
gggg747636 2009-01-14
  • 打赏
  • 举报
回复



我 主要是不了解那个节点如何拖动, 如:

1 北京市 0
2 东城区 1
3 长沙 0
4 天心 3

当我拖到了,相应的改变数据库里面的 上级ID
我要把那天心 拖动到 北京市下面


北京市 0
东城区 1
天心 1
长沙 0


zgke 2009-01-13
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 gggg747636 的回复:]
我的意思 就是 不拖控件 ,

TreeNode node = new TreeNode ();


再用 node. 那些属性 或方法。。。。。。


我 主要是不了解那个节点如何拖动, 如:

北京市
东城区
长沙
天心


我要把那天心 拖动到 北京市下面


北京市
东城区
天心
长沙


[/Quote]

上面发的代码基本都能用...都是拖动节点的....别人把代码给你发了 你也去测试下啊
gggg747636 2009-01-13
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 ICanUseThisID 的回复:]
dragdrop事件处理函数中有个bug,现改为如下,没详细测试,仅供参考:

C# code
private void treeView1_DragDrop(object sender, DragEventArgs e)
{
TreeNode fromNode = e.Data.GetData(typeof(TreeNode)) as TreeNode;
TreeNode toNode = treeView1.GetNodeAt(treeView1.PointToClient(new Point(e.X, e.Y)));

if (fromNode != null && toNode != null)

[/Quote]


我的效果是随意拖动。 这种效果 达不到吧
ICanUseThisID 2009-01-13
  • 打赏
  • 举报
回复
dragdrop事件处理函数中有个bug,现改为如下,没详细测试,仅供参考:

private void treeView1_DragDrop(object sender, DragEventArgs e)
{
TreeNode fromNode = e.Data.GetData(typeof(TreeNode)) as TreeNode;
TreeNode toNode = treeView1.GetNodeAt(treeView1.PointToClient(new Point(e.X, e.Y)));

if (fromNode != null && toNode != null)
{
//判断toNode是不是fromNode的子节点,如果是则返回
TreeNode[] childs = fromNode.Nodes.Find(toNode.Name, true);
if (childs.Length > 0)
{
return;
}

treeView1.Nodes.Remove(fromNode);
toNode.Nodes.Add(fromNode);

treeView1.ExpandAll();
}
}
gggg747636 2009-01-13
  • 打赏
  • 举报
回复
我的意思 就是 不拖控件 ,

TreeNode node = new TreeNode ();


再用 node. 那些属性 或方法。。。。。。


我 主要是不了解那个节点如何拖动, 如:

北京市
东城区
长沙
天心


我要把那天心 拖动到 北京市下面


北京市
东城区
天心
长沙

ICanUseThisID 2009-01-13
  • 打赏
  • 举报
回复

public Form1()
{
InitializeComponent();
treeView1.AllowDrop = true;
}

private void treeView1_ItemDrag(object sender, ItemDragEventArgs e)
{
treeView1.DoDragDrop(e.Item, DragDropEffects.Move);
}

private void treeView1_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(typeof(TreeNode)))
{
e.Effect = e.AllowedEffect;
}
}

private void treeView1_DragDrop(object sender, DragEventArgs e)
{
TreeNode fromNode = e.Data.GetData(typeof(TreeNode)) as TreeNode;
TreeNode toNode = treeView1.GetNodeAt(treeView1.PointToClient(new Point(e.X, e.Y)));

if (fromNode != null && toNode != null)
{
treeView1.Nodes.Remove(fromNode);
toNode.Nodes.Add(fromNode);

treeView1.ExpandAll();
}
}

gengxin_914 2009-01-13
  • 打赏
  • 举报
回复
http://www.cnblogs.com/wf5360308/articles/1234515.html
wapit 2009-01-13
  • 打赏
  • 举报
回复
撒给我好了. 我也来学习......
h_w_king 2009-01-13
  • 打赏
  • 举报
回复

不明白LZ "不用控件构建Treeview 数的 问题" 什么意思.


随意拖动树的节点:
TreeNode selectnode = null;
private void treeView1_MouseDown(object sender, MouseEventArgs e)
{
selectnode = this.treeView1.HitTest(e.Location).Node;
}

bool ismoveTreenode = false;
private void treeView1_MouseMove(object sender, MouseEventArgs e)
{
if (selectnode == null)
{
ismoveTreenode = false;
return;
}
TreeNode td = this.treeView1.HitTest(e.Location).Node;
if (td != null)
{
this.treeView1.SelectedNode = td;
ismoveTreenode = true;
td.Expand();
}
}

private void treeView1_MouseUp(object sender, MouseEventArgs e)
{
if (selectnode != null && ismoveTreenode)
{
TreeNode td = this.treeView1.HitTest(e.Location).Node;
if (td != null)
{
if (td == selectnode || selectnode.Parent == td)
{
selectnode = null;
ismoveTreenode = false;
return;
}
if (selectnode.Parent != null)
selectnode.Parent.Nodes.Remove(selectnode);
else
this.treeView1.Nodes.Remove(selectnode);
td.Nodes.Add(selectnode);
selectnode = null;
ismoveTreenode = false;
selectnode = null;
}
else
{
selectnode = null;
}


}
else
selectnode = null;
}
zgke 2009-01-13
  • 打赏
  • 举报
回复
看看这个能帮你不
http://blog.csdn.net/zgke/archive/2009/01/13/3768131.aspx

春天的气息 2009-01-13
  • 打赏
  • 举报
回复
可以按照TreeView控件的思路去构建,把每个节点都看作一个对象,而不是填充。
gggg747636 2009-01-13
  • 打赏
  • 举报
回复
诶。. 居然100 分都没人来说说,这个问题 ?
luckapple2 2009-01-13
  • 打赏
  • 举报
回复
支持下。我也学习。

111,130

社区成员

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

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

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