ListView 和TreeView控件相互拖拽
来源:互联网 发布:2017高仿耐克淘宝店 编辑:程序博客网 时间:2024/04/30 20:49
因项目需要,需要做一个类似的功能,参考了网上的一篇资料,并根据自己的理解进行了一些功能的修改,主要实现了 两个控件间的相互拖拽、TreeView自身的拖拽(拖拽只在一级节点上,没有涉及到子节点或多级子节点,有兴趣的朋友可以在此基础上进行修改即可),原资料链接(http://blog.csdn.net/qingchouchen/article/details/3547216)
以下是实现代码:
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;namespace lvtv拖拽{ public partial class Form1 : Form { Point position = new Point(); bool isSourceLView = false; bool isSourceTView = false; public Form1() { InitializeComponent(); } private void treeView1_ItemDrag(object sender, ItemDragEventArgs e) { string strItem = e.Item.ToString(); DoDragDrop(strItem, DragDropEffects.Move|DragDropEffects.Copy); isSourceTView = true; isSourceLView = false; } private void treeView1_DragEnter(object sender, DragEventArgs e) { //判断是否目前拖动的数据是字符串,如果是,则拖动符串对目的组件进行拷贝 if (e.Data.GetDataPresent(DataFormats.Text)) { e.Effect = DragDropEffects.Move; } else e.Effect = DragDropEffects.None; } private void listView1_DragEnter(object sender, DragEventArgs e) { //判断是否目前拖动的数据是字符串,如果是,则拖动符串对目的组件进行拷贝 if (e.Data.GetDataPresent(DataFormats.Text)) { e.Effect = DragDropEffects.Move; } else e.Effect = DragDropEffects.None; } private void listView1_DragDrop(object sender, DragEventArgs e) { if (isSourceTView) { string dummy = "temp"; //获得进行"Drag"操作中拖动的字符串 string s = (string)e.Data.GetData(dummy.GetType()); s = s.Substring(s.IndexOf(":") + 1).Trim(); //判断是否已经存在此节点 bool isExited=false; for (int i = 0; i < listView1.Items.Count; i++) { if (s == listView1.Items[i].Text) { isExited = true; break; } } if (isExited) return; position.X = e.X; position.Y = e.Y; position = listView1.PointToClient(position); //在目标组建中加入以此字符串为标题的项目 listView1.Items.Add(new ListViewItem(s, 0)); //删除移动的节点 //treeView1.Nodes.RemoveByKey(s); for (int i = 0; i < treeView1.Nodes.Count; i++) { if (s == treeView1.Nodes[i].Text) { treeView1.Nodes.Remove(treeView1.Nodes[i]); break; } } } } private void listView1_ItemDrag(object sender, ItemDragEventArgs e) { //此处用鼠标左键移动 if (e.Button != MouseButtons.Left) return; int nTotalSelected = listView1.SelectedIndices.Count; if (nTotalSelected <= 0) return; System.Collections.IEnumerator selCol = listView1.SelectedItems.GetEnumerator(); selCol.MoveNext(); ListViewItem lvItem = (ListViewItem)selCol.Current; string mDir = ""; string tempS = ""; for (int i = 0; i < lvItem.SubItems.Count; i++) { mDir += lvItem.SubItems[i].Text + ","; } tempS = mDir.Substring(0, mDir.Length - 1); if (tempS == "") return; isSourceLView = true; isSourceTView = false; //开始对字符串进行拖拽 listView1.DoDragDrop(tempS, DragDropEffects.Move); } private void treeView1_DragDrop(object sender, DragEventArgs e) { //获得进行"Drag"操作中拖动的字符串 string dummy = "temp"; string s = (string)e.Data.GetData(dummy.GetType()); s = s.Substring(s.IndexOf(":") + 1).Trim(); position.X = e.X; position.Y = e.Y; position = treeView1.PointToClient(position); TreeNode DropNode = this.treeView1.GetNodeAt(position); if (isSourceLView == true) { //判断 treeview中是否存在此名称的节点 bool isExist = false; for (int i = 0; i < treeView1.Nodes.Count; i++) { if (s == treeView1.Nodes[i].Text) { isExist = true; break; } } if (isExist) return; if (DropNode != null) { TreeNode DragNode = new TreeNode(s); DragNode.ImageIndex = 0; treeView1.Nodes.Insert(DropNode.Index + 1, DragNode); //移除treeview中的节点 for (int i = 0; i < listView1.Items.Count; i++) { if (s == listView1.Items[i].Text) { listView1.Items.Remove(listView1.Items[i]); } } } } else { TreeNode myNode = null; for (int i = 0; i < treeView1.Nodes.Count; i++) { if (treeView1.Nodes[i].Text == s) { myNode = treeView1.Nodes[i]; break; } } if (DropNode != null && DropNode != myNode) { TreeNode dragNode = myNode; myNode.Remove(); treeView1.Nodes.Insert(DropNode.Index + 1, dragNode); } } } }}运行结构就不贴了……
- ListView 和TreeView控件相互拖拽
- c#关于listview treeview 的相互拖放
- TreeView/ListView/ImageList 控件改造
- ListView,TreeView控件的使用
- 一些好工具和控件--.NET控件(TreeView ,ListView, XML ,UML)整理
- TreeView和ListView用法入门
- 使用设计器创建带有 ListView 和 TreeView 控件的资源管理器样式的界面 [无限级treeview]
- [C# 控件学习一]TreeView ListView
- c#中TreeView,ListView,Splitter控件
- BCB中listview和treeview控件实现制定列和标题字体颜色改变的实现
- 使用TreeView和listView控件查看本机磁盘文件夹及文件(WinForm)
- 使用设计器创建带有 ListView 和 TreeView 控件的资源管理器样式的界面
- 使用TreeView和listView控件查看本机磁盘文件夹及文件(WinForm)
- 使用TreeView和listView控件查看本机磁盘文件夹及文件(WinForm)
- DELPHI VCL组件 TTreeList, Listview和Treeview相结合的多列树控件
- 树节点相互移动操作----使用微软treeview控件
- C#中两个TreeView控件如何相互赋值
- TreeView与ListView之间及自身的拖拽操作
- 使用easyUI创建XP风格左侧面板
- IE老提示“数字证书”过期/错误的解决方法
- spring的详细复习讲解
- view
- 学习JFreeChart类,编写了柱状图、饼图、甘特图,可以在DWZ中显示
- ListView 和TreeView控件相互拖拽
- Elecom公司推出首款NFC手机键盘
- 利用SQL语句创建、修改、执行、删除存储过程(简单应用)
- does not contain debug information. Press OK to Continue
- 制作u-boot.bin
- HDOJ1162Eddy's picture
- UML类图几种关系的总结
- 转载好文--完全接管遥控器(Total Remote Control)--
- android 的 Launcher 分析