winform中的treeview控件中,如何实现节点之间的拖动 ItemDrag //开始拖动DragOver //拖动DragDrop //拖动后放置 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 下面是一个实例中的代码,可能包含一些标识变量,将它们去掉即可: //开始拖动 private void Tvw_ItemDrag(object sender, ItemDragEventArgs e) { try { if (e.Button ==MouseButtons.Left) //左键 { if (this._AllowAlter) //允许修改,允许拖动 { DoDragDrop(e.Item,DragDropEffects.Move); } } } catch(Exception err) { MessageBox.Show(err.Message,"提示",MessageBoxButtons.OK,MessageBoxIcon.Error); } if (ItemDrag!=null) //触发事件 { ItemDrag(sender,e); } } //拖动 private void Tvw_DragOver(object sender, System.Windows.Forms.DragEventArgs e) { try {// if (e.Data.GetData("System.Windows.Forms.TreeNode")!=null) if(e.Data.GetDataPresent("System.Windows.Forms.TreeNode")) //TreeNode { Point pos=new Point(e.X,e.Y); pos=this.Tvw.PointToClient(pos); if (Tvw.GetNodeAt(pos.X,pos.Y)!=null) //当前项不空 { TreeNode tnNow=Tvw.GetNodeAt(pos.X,pos.Y); TreeNode tnData=(TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode"); if (tnData!=tnNow) //不同 { if (IsSon(tnData,tnNow)) //父结点不能拖至子结点 { e.Effect=DragDropEffects.None; } else { bool IsFather=false; foreach(TreeNode tn in tnNow.Nodes) { if (tn==tnData) //是否父结点 { IsFather=true; break; } } if (IsFather) //目标结点是拖动结点的直接父结点 { e.Effect=DragDropEffects.None; } else { e.Effect=DragDropEffects.Move; } } } else //本结点 { e.Effect=DragDropEffects.None; } } else { e.Effect=DragDropEffects.None; } } else { e.Effect=DragDropEffects.None; } } catch(Exception err) { MessageBox.Show(err.Message,"提示",MessageBoxButtons.OK,MessageBoxIcon.Error); } } //拖动后放置 private void Tvw_DragDrop(object sender, System.Windows.Forms.DragEventArgs e) { try { if(e.Data.GetDataPresent("System.Windows.Forms.TreeNode")) //拖动项目不空 { Point pos=new Point(e.X,e.Y); pos=this.Tvw.PointToClient(pos); TreeNode tnData=(TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode"); if (Tvw.GetNodeAt(pos.X,pos.Y)!=null) //当前项不空 { TreeNode tnNow=Tvw.GetNodeAt(pos.X,pos.Y); DialogResult dResult=MessageBox.Show("您确定要将权限 “" + tnData.Text + "” 作为 “" + tnNow.Text + "” 的子权限吗?","提示",MessageBoxButtons.OKCancel,MessageBoxIcon.Question); if (dResult==DialogResult.OK) //OK,Move { if (MoveModule(tnData.Tag.ToString(),tnNow.Tag.ToString())) //数据库中移动成功 { tnNow.Expand(); Tvw.Nodes.Remove(tnData); //移除原来的结点 tnNow.Nodes.Add(tnData); //添加至目标结点 tnNow.Expand(); Tvw.SelectedNode=tnData; this.SelectedNode=tnData; this.MouseSelectedNode=tnData; } } Tvw.Focus(); } } } catch(Exception err) { MessageBox.Show(err.Message,"提示",MessageBoxButtons.OK,MessageBoxIcon.Error); } } 请问datagridview的datasource的默认属性是什么 GDI+如何获取PNG图片的Alpha通道值 如何快速的读取和插入数据???? 关于10M以上图片的数字处理问题 如何使用Datagridview显示,添加,修改数据库,好像和DataGrid不同啊!急! 我的C#项目怎么不能出现水晶报表设计器呢? 我公司(在深圳)現想請.net高手來講課,請有意的朋友留下msn號,我們會和您聯繫. 如何实现自动关闭右下角的弹窗 求助,求帮忙 怎样把<>转换成<> 如何让颜色渐变??? winform程式,怎样对用户限制某些功能可用某些不可用?
private void Tvw_ItemDrag(object sender, ItemDragEventArgs e)
{
try
{
if (e.Button ==MouseButtons.Left) //左键
{
if (this._AllowAlter) //允许修改,允许拖动
{
DoDragDrop(e.Item,DragDropEffects.Move);
}
}
}
catch(Exception err)
{
MessageBox.Show(err.Message,"提示",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
if (ItemDrag!=null) //触发事件
{
ItemDrag(sender,e);
}
}
//拖动
private void Tvw_DragOver(object sender, System.Windows.Forms.DragEventArgs e)
{
try
{
// if (e.Data.GetData("System.Windows.Forms.TreeNode")!=null)
if(e.Data.GetDataPresent("System.Windows.Forms.TreeNode")) //TreeNode
{
Point pos=new Point(e.X,e.Y);
pos=this.Tvw.PointToClient(pos);
if (Tvw.GetNodeAt(pos.X,pos.Y)!=null) //当前项不空
{
TreeNode tnNow=Tvw.GetNodeAt(pos.X,pos.Y);
TreeNode tnData=(TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode");
if (tnData!=tnNow) //不同
{
if (IsSon(tnData,tnNow)) //父结点不能拖至子结点
{
e.Effect=DragDropEffects.None;
}
else
{
bool IsFather=false;
foreach(TreeNode tn in tnNow.Nodes)
{
if (tn==tnData) //是否父结点
{
IsFather=true;
break;
}
}
if (IsFather) //目标结点是拖动结点的直接父结点
{
e.Effect=DragDropEffects.None;
}
else
{
e.Effect=DragDropEffects.Move;
}
}
}
else //本结点
{
e.Effect=DragDropEffects.None;
}
}
else
{
e.Effect=DragDropEffects.None;
}
}
else
{
e.Effect=DragDropEffects.None;
}
}
catch(Exception err)
{
MessageBox.Show(err.Message,"提示",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
} //拖动后放置
private void Tvw_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
{
try
{
if(e.Data.GetDataPresent("System.Windows.Forms.TreeNode")) //拖动项目不空
{
Point pos=new Point(e.X,e.Y);
pos=this.Tvw.PointToClient(pos);
TreeNode tnData=(TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode");
if (Tvw.GetNodeAt(pos.X,pos.Y)!=null) //当前项不空
{
TreeNode tnNow=Tvw.GetNodeAt(pos.X,pos.Y);
DialogResult dResult=MessageBox.Show("您确定要将权限 “" + tnData.Text + "” 作为 “" + tnNow.Text + "” 的子权限吗?","提示",MessageBoxButtons.OKCancel,MessageBoxIcon.Question);
if (dResult==DialogResult.OK) //OK,Move
{
if (MoveModule(tnData.Tag.ToString(),tnNow.Tag.ToString())) //数据库中移动成功
{
tnNow.Expand();
Tvw.Nodes.Remove(tnData); //移除原来的结点
tnNow.Nodes.Add(tnData); //添加至目标结点
tnNow.Expand();
Tvw.SelectedNode=tnData;
this.SelectedNode=tnData;
this.MouseSelectedNode=tnData;
}
}
Tvw.Focus();
}
}
}
catch(Exception err)
{
MessageBox.Show(err.Message,"提示",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
}