• treeview


    快速实现在Windows应用程序中支持拖拽的TreeView控件。

    技术描述

    TreeView已经提供了支持拖拽的事件:


    ItemDrag: 用户拖拽TreeNode时触发。当它发生时,调用DoDragDrop方法初始化拖拽过程。


    DragEnter: 在你初始化拖拽操作后,你必须处理目标TreeView控件的DragEnter事件。 这个事件发生在用户拖拽TreeNode对象从TreeView控件到目标控件范围点内。DragEnter事件能够指定目标TreeView控件,无论 拖拽操作对这个控件是否用。代码中仅仅是移动操作。


    DragDrop: 最后是要处理目标TreeView的DragDrop事件。这个事件发生在用户推拽TreeNode对象并释放到目标控件中。处理这个事件, 返回TreeNode对象并添加到目标TreeView控件上。代码中用Data对象返回。

    以 下代码实现一个TreeView控件上拖拽任意节点到指定节点上,也可以自己扩展为多个TreeView控件间TreeNode相互拖拽的程序。Data 对象的GetData方法返回被拖拽的TreeNode对象。GetNodeAt方法用来确定这个TreeNode对象拖拽到的目标控件(这里就是目标 TreeNode对象)。在确定位置之后把源TreeNode对象添加到目标TreeNode对象下面,作为其子结点。因为是移动操作,因此最后会把源 TreeNode对象删除掉。

    通过以下几步创建实例程序:

    1.
    创建C# Windows应用程序

    2.
    界面增加一个TreeView控件

    3.
    设置TreeView的AllowDrop属性设置为True

    4.
    Page_Load方法中增加如下代码:

    private void Form1_Load(object sender, System.EventArgs e)

                  {

    // TreeView控件增加一些测试节点

                         TreeNode ParentNode1;

                         ParentNode1 = treeView1.Nodes.Add("tv1");

                         ParentNode1.Nodes.Add("tv1FirstChild");

                         ParentNode1.Nodes.Add("tv1SecondChild");

                         ParentNode1.Nodes.Add("tv1ThirdChild");

                         ParentNode1.Nodes.Add("tv1FourthChild");

                         ParentNode1.Expand();

    // TreeView控件增加事件

                         this.treeView1.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.treeView_ItemDrag);

                         this.treeView1.DragEnter += new System.Windows.Forms.DragEventHandler(this.treeView_DragEnter);

                         this.treeView1.DragDrop += new System.Windows.Forms.DragEventHandler(this.treeView_DragDrop);

                  }

    5.
    //treeView_ItemDrag 事件代码:

    private void treeView_ItemDrag(object sender,

                         System.Windows.Forms.ItemDragEventArgs e)

                  {

                         DoDragDrop(e.Item, DragDropEffects.Move);

                  }

    6.
    // treeView_DragEnter事件代码:

    private void treeView_DragEnter(object sender,

                         System.Windows.Forms.DragEventArgs e)

                  {

                         e.Effect = DragDropEffects.Move;

                  }

    7.

    // treeView_DragDrop事件代码:

    private void treeView_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)

                  {

                         TreeNode NewNode;

                         if(e.Data.GetDataPresent(typeof(TreeNode)))

                         {

                                Point pt = ((TreeView)sender).PointToClient(new Point(e.X, e.Y));

                                TreeNode DestinationNode = ((TreeView)sender).GetNodeAt(pt);

                                NewNode = (TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode");

                                DestinationNode.Nodes.Add((TreeNode) NewNode.Clone());

                                DestinationNode.Expand();

                                //删除已经移动的节点

                                NewNode.Remove();

                         }

                  }

  • 相关阅读:
    当前疫情期间,家里可以适当储备的物资
    35岁改行做程序员,需要勇气和决心
    离婚潮来临,女性在崛起
    摄影作品首先要取悦自己,更要打动他人
    京剧是该阳春白雪还是下里巴人?
    汶川和武汉哪个更让人铭记?
    35以上的女强人不结婚,只用平常待之
    苏州记忆之上班路上偶遇2美女打架
    SAP SD微观研究之销售发票自动生成初探
    Python requests库的使用(二)
  • 原文地址:https://www.cnblogs.com/zhangjun1130/p/1426157.html
Copyright © 2020-2023  润新知