不用控件构建Treeview 数的 问题? 随意拖动树的节点?100分 Treeview 树 , 随意拖动树的节点, 拖到那个节点下面,就挂在哪个节点下面。谢谢。。 给思路或源码都行。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可以按照TreeView控件的思路去构建,把每个节点都看作一个对象,而不是填充。 看看这个能帮你不http://blog.csdn.net/zgke/archive/2009/01/13/3768131.aspx 不明白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; } http://www.cnblogs.com/wf5360308/articles/1234515.html 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(); } } 我的意思 就是 不拖控件 , TreeNode node = new TreeNode (); 再用 node. 那些属性 或方法 我 主要是不了解那个节点如何拖动, 如: 北京市 东城区 长沙 天心我要把那天心 拖动到 北京市下面北京市 东城区 天心长沙 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(); } } treeview 里面 没有这个事件吧, treeView1_DragDrop 给点注释啊。。 我这个东西不是很懂 ?谢了 我是 建的web 项目 , 我在treeview 的事件中没有看到你说的 那个 dragdrop事件我的里面只有 这些事件的: 那个web 的该怎么做了类。。 。。 给点意见或 源码咯 , 给源码的 顺便写点注释。。谢谢。 网络硬盘 List<T>对象数组取值问题 C#模式窗体问题:一个模式窗体弹出另外一个模式窗体,但是这个模式窗体却关不掉!!在线等待!!!!!!!!!!!!!!!! 一个小小的算法问题 提取最多的字符 【求救啊】数据导入搞了好多天了!没头绪,大家帮帮忙! 一个简单的SQL GROUP BY 排序的问题,高手帮帮忙,急~~~ 问一个Attributes.Add()的问题~~ 请问单例模式类创建的实例在何时会自动被.NET销毁? 不好解决的多线程问题??? 自定义结构属性,怎么才能向Location结构属性一样在propertyGrid控件里编辑? froms验证 c#白板控件
http://blog.csdn.net/zgke/archive/2009/01/13/3768131.aspx
不明白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;
}
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();
}
}
再用 node. 那些属性 或方法
我 主要是不了解那个节点如何拖动, 如: 北京市
东城区
长沙
天心
我要把那天心 拖动到 北京市下面
北京市
东城区
天心
长沙
{
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();
}
}
给点注释啊。。 我这个东西不是很懂 ?
谢了
我是 建的web 项目 , 我在treeview 的事件中没有看到你说的 那个 dragdrop事件我的里面只有 这些事件的: