c# winform TreeView与ListView的项互相拖动的应用


主要代码实现如下:

       #region 将LISTVIEW项拖动TREEVIEW中

        /// <summary>
        /// 对选中项指定Move的“开始拖动操作”
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void listView1_ItemDrag(object sender, System.Windows.Forms.ItemDragEventArgs e)
        {
            this.DoDragDrop(e.Item,DragDropEffects.Move);
        }

        private void listView1_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)
        {
            e.Effect=DragDropEffects.Move;
        }

        private void treeView1_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)
        {
            //判定是否现在拖动的数据是LISTVIEW项
            ListViewItem lvi = (ListViewItem)e.Data.GetData(typeof(ListViewItem)); 
            if (lvi != null) 
            { 
                e.Effect = DragDropEffects.Move; 
            } 
            else 
                Cursor = Cursors.No;

        }
        private void treeView1_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
        {
            //获得拖放中的项
            ListViewItem lvi = (ListViewItem)e.Data.GetData(typeof(ListViewItem));

            //根据鼠标坐标确定要移动到的目标节点
            Point pt;
            TreeNode targeNode;
            pt = ((TreeView)(sender)).PointToClient(new Point(e.X, e.Y));
            targeNode = this.treeView1.GetNodeAt(pt);
            TreeNode NewMoveNode  =new TreeNode(lvi.Text);
            if(targeNode!=null)//如果目标节点未选中,则添加到一级节点
            {
                targeNode.Nodes.Add(NewMoveNode);
                //更新当前拖动的节点选择
                treeView1.SelectedNode = NewMoveNode;
                //展开目标节点,便于显示拖放效果
                targeNode.Expand();
                treeView1.Refresh();
            }
            else
            {
                this.treeView1.Nodes.Add(NewMoveNode);
                //更新当前拖动的节点选择
                treeView1.SelectedNode = NewMoveNode;
                //展开目标节点,便于显示拖放效果
                treeView1.ExpandAll();
                treeView1.Refresh();
            }
            
        }
        #endregion
       #region 将treeView的项拖动到ListView

        //定义被选择的项
        private TreeNode _selectednode;

        /// <summary>
        /// 选择treeView的项
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void treeView2_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)
        {
            try 
            {
                _selectednode = e.Node; 
            }
            catch { }
        }
        /// <summary>
        /// 对选中项指定Move的“开始拖动操作”
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void treeView2_ItemDrag(object sender, System.Windows.Forms.ItemDragEventArgs e)
        {
            this.DoDragDrop(_selectednode,DragDropEffects.Move);
        }

        private void treeView2_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)
        {
            e.Effect=DragDropEffects.Move;
        }

        /// <summary>
        /// 添加MouseDown是因为,MouseDown先执行AfterSelect,所以在没有AfterSelect时,MouseDown要先选中被选取项
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void treeView2_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
        {
            try 
            { 
                if ((e.Button & MouseButtons.Left) == MouseButtons.Left) 
                { 
                    _selectednode = treeView2.GetNodeAt(e.X,e.Y); 
                    treeView2.SelectedNode = _selectednode;
                } 
            } 
            catch { }

        }

        private void FillListView(TreeNodeCollection nodes) 
        { 
            for (int i = 0; i < nodes.Count; i++) 
            { 
                ListViewItem lvwItem = new ListViewItem(nodes[i].Text, nodes[i].ImageIndex); 
                lvwItem.Tag = nodes[i].Tag; 
                listView2.Items.Add(lvwItem); 
            } 
        }

        //当选中项移到listView的工作区时,指定被拖动的目标的移动方式
        private void listView2_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)
        {
            try 
            { 
                TreeNode node = (TreeNode)e.Data.GetData(typeof(TreeNode)); 
                if (node != null) 
                { 
                    e.Effect = DragDropEffects.Move; 
                } 
                else 
                    Cursor = Cursors.No; 
            } 
            catch { } 
            finally { Cursor = Cursors.Default; }

        }

        //当选中项在listView在随SHU标移动时,指定被拖动的目标的移动方式
        private void listView2_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
        {
            try 
            { 
                if (_selectednode != null & (e.Button & MouseButtons.Left) == MouseButtons.Left) 
                { 
                    DragDropEffects dropEffect = listView2.DoDragDrop(_selectednode, DragDropEffects.Move); 
                } 
            } 
            catch { }

        }

        //当被放入控件时
        private void listView2_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
        {
            try 
            { 
                TreeNode node = (TreeNode)e.Data.GetData(typeof(TreeNode)); 
                if (node != null) 
                    listView2.Items.Add(node.Text, node.ImageIndex); 
            } 
            catch { } 
            finally { Cursor = Cursors.Default; } 
        }

        #endregion

http://blog.csdn.net/modede/archive/2008/05/27/2486663.aspx


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值