zoukankan      html  css  js  c++  java
  • C# TreeView树节点上下移动

    1. /// <summary>  
    2.        /// 上移  
    3.        /// </summary>  
    4.        /// <param name="sender"></param>  
    5.        /// <param name="e"></param>  
    6.        private void tsbMoveUp_Click(object sender, EventArgs e)  
    7.        {  
    8.            if (Tv_tree.SelectedNode == null)  
    9.            {  
    10.                MessageBox.Show("请选择需要移动的的节点!");  
    11.                this.Focus();  
    12.                return;  
    13.            }  
    14.            folder  model = new folder();  
    15.            TreeNode node = Tv_tree.SelectedNode;     //获得选中节点的值  
    16.            model.folderId = node.Tag.ToString();  
    17.            model.TheOrder = node.Name.ToString();  
    18.            if (node.PrevNode == null)      //选中节点的上一个节点为Null则返回  
    19.            {  
    20.                return;  
    21.            }  
    22.            folder upModel = new folder();  
    23.            TreeNode upNode = node.PrevNode;            //获得选中节点的上一个节点  
    24.            upModel.folderId = upNode.Tag.ToString();  
    25.            upModel.TheOrder = upNode.Name;  
    26.            bool flag = folderOperation.MoveUp(model, upModel);       //将两个节点的排序编号互换  
    27.            if (flag)       //如果执行成功  
    28.            {  
    29.                string theOrder = node.Name;  
    30.                node.Name = upNode.Name;  
    31.                upNode.Name = theOrder;  
    32.                TreeNode newNode = (TreeNode)node.Clone();      //克隆选中的节点  
    33.                if (node.Parent == null)  
    34.                {  
    35.                    Tv_tree.Nodes.Insert(upNode.Index, newNode);      //在选中节点的上一个节点的地方插入本节点  
    36.                }  
    37.                else  
    38.                {  
    39.                    node.Parent.Nodes.Insert(upNode.Index, newNode);  
    40.                }  
    41.                node.Remove();  
    42.                Tv_tree.SelectedNode = newNode;  
    43.            }  
    44.            else  
    45.            {  
    46.                return;  
    47.            }  
    48.        }  
    49.        /// <summary>  
    50.        /// 下移  
    51.        /// </summary>  
    52.        /// <param name="sender"></param>  
    53.        /// <param name="e"></param>  
    54.        private void tsbMoveDown_Click(object sender, EventArgs e)  
    55.        {  
    56.            if (Tv_tree.SelectedNode == null)  
    57.            {  
    58.               MessageBox.Show("请选择需要移动的的节点!");  
    59.                this.Focus();  
    60.                return;  
    61.            }  
    62.            folder model = new folder();  
    63.            TreeNode node = Tv_tree.SelectedNode;     //选中的节点  
    64.            model.folderId = node.Tag.ToString();  
    65.            model.TheOrder = node.Name.ToString();  
    66.            if (node.NextNode == null)      //下一个节点为Null时返回  
    67.            {  
    68.                return;  
    69.            }  
    70.            folder downModel = new folder();  
    71.            TreeNode dowNode = node.NextNode;  
    72.            downModel.folderId = dowNode.Tag.ToString();  
    73.            downModel.TheOrder = dowNode.Name;  
    74.            bool flag = folderOperation.MoveUp(model, downModel);  
    75.            if (flag)  
    76.            {  
    77.                string theOrder = node.Name;  
    78.                node.Name = dowNode.Name;  
    79.                dowNode.Name = theOrder;  
    80.                TreeNode newNode = (TreeNode)dowNode.Clone();       //克隆下一个节点及其所有的子节点  
    81.                if (node.Parent == null)  
    82.                {  
    83.                    Tv_tree.Nodes.Insert(node.Index, newNode);    //在原节点的位置插入下一个节点的值  
    84.                }  
    85.                else  
    86.                {  
    87.                    node.Parent.Nodes.Insert(node.Index, newNode);  
    88.                }  
    89.                dowNode.Remove();           //删除掉选中节点的下一个节点  
    90.                Tv_tree.SelectedNode = node;  //重新选中  
    91.            }  
    92.            else  
    93.            {  
    94.                return;  
    95.            }  
    96.        }  
    97.   
    98. string sql = string.Format("update folder set theorder = '{0}' where folderid = '{1}'", model.TheOrder, upModel.folderId);             
    99. string sql1 = string.Format("update folder set theorder = '{0}' where folderid = '{1}'", upModel.TheOrder, model.folderId);  
     
    1.      /// <summary>  
    2.         /// 节点的展开和折叠  
    3.         /// </summary>  
    4.         /// <param name="sender"></param>  
    5.         /// <param name="e"></param>  
    6.         private void tvDocInfo_AfterExpand(object sender, TreeViewEventArgs e)  
    7.         {  
    8.             if (e.Node.Parent == null)  
    9.             {  
    10.                 TreeView tree = (TreeView)sender;  
    11.                 tree.AfterCheck -= new TreeViewEventHandler(this.tvDocInfo_AfterExpand);  
    12.                 //折叠其他同级节点     
    13.                 TreeNode parentNode = e.Node.Parent;  
    14.                 if (parentNode != null)  
    15.                 {  
    16.                     foreach (TreeNode tn in parentNode.Nodes)  
    17.                     {  
    18.                         if (tn != e.Node)  
    19.                             tn.Collapse();  
    20.                     }  
    21.                 }  
    22.                 else  
    23.                 {  
    24.                     foreach (TreeNode tn in tree.Nodes)  
    25.                     {  
    26.                         if (tn != e.Node)  
    27.                             tn.Collapse();  
    28.                     }  
    29.                 }  
    30.             }  
    31.   
    32.         }  


    节点拖拽,必须设置TreeView的AllowDrop属性为True;

      1. private Point Position = new Point(0, 0);  
      2.   
      3. private void treeView1_ItemDrag(object sender, ItemDragEventArgs e)  
      4. {  
      5.     DoDragDrop(e.Item, DragDropEffects.Move);  
      6. }  
      7.   
      8. private void treeView1_DragEnter(object sender, DragEventArgs e)  
      9. {  
      10.     if (e.Data.GetDataPresent(typeof(TreeNode)))  
      11.         e.Effect = DragDropEffects.Move;  
      12.     else  
      13.         e.Effect = DragDropEffects.None;  
      14. }  
      15.   
      16. private void treeView1_DragDrop(object sender, DragEventArgs e)  
      17. {  
      18.     TreeNode myNode = null;  
      19.     if (e.Data.GetDataPresent(typeof(TreeNode)))  
      20.     {  
      21.         myNode = (TreeNode)(e.Data.GetData(typeof(TreeNode)));  
      22.     }  
      23.     else  
      24.     {  
      25.         MessageBox.Show("error");  
      26.     }  
      27.     Position.X = e.X;  
      28.     Position.Y = e.Y;  
      29.     Position = tvType.PointToClient(Position);  
      30.     TreeNode DropNode = this.tvType.GetNodeAt(Position);  
      31.     if (FunctionsUI.CreateQuestionDialog("是否要将"+myNode.Text+"移动"+DropNode.Text+"类别下?") == DialogResult.OK)  
      32.     {  
      33.         // 1.目标节点不是空。2.目标节点不是被拖拽接点的字节点。3.目标节点不是被拖拽节点本身  
      34.         if (DropNode != null && DropNode.Parent != myNode && DropNode != myNode)  
      35.         {  
      36.             TreeNode DragNode = myNode;  
      37.             // 将被拖拽节点从原来位置删除。  
      38.             myNode.Remove();  
      39.             // 在目标节点下增加被拖拽节点  
      40.             DropNode.Nodes.Add(DragNode);  
      41.         }  
      42.         // 如果目标节点不存在,即拖拽的位置不存在节点,那么就将被拖拽节点放在根节点之下  
      43.         if (DropNode == null)  
      44.         {  
      45.             TreeNode DragNode = myNode;  
      46.             myNode.Remove();  
      47.             tvType.Nodes.Add(DragNode);  
      48.         }  
      49.     }  

  • 相关阅读:
    bzoj4758: [Usaco2017 Jan]Subsequence Reversal(区间dp)
    bzoj4580: [Usaco2016 Open]248(区间dp)
    1617: [Usaco2008 Mar]River Crossing渡河问题(dp)
    bzoj21012101: [Usaco2010 Dec]Treasure Chest 藏宝箱(滚动数组优化dp)
    P2339 提交作业usaco(区间dp)
    day11
    bzoj2330: [SCOI2011]糖果(差分约束)
    P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm(Tarjan+记忆化)
    P2700逐个击破(并查集/树形dp)
    bzoj1770: [Usaco2009 Nov]lights 燈(折半搜索)
  • 原文地址:https://www.cnblogs.com/furenjian/p/3037261.html
Copyright © 2011-2022 走看看