TreeView的有关操作

类别:.NET开发 点击:0 评论:0 推荐:

/// <summary>
  /// 递归选中子节点
  /// </summary>
  /// <param name="treeNode">节点</param>
  /// <param name="nodeChecked">bool值</param>
  private void CheckAllChildNodes(TreeNode treeNode, bool nodeChecked)
  {
   foreach(TreeNode node in treeNode.Nodes)
   {
    node.Checked = nodeChecked;
    if(node.Nodes.Count > 0)
    {  
     //如果当前结点有子节点,调用递归函数
     this.CheckAllChildNodes(node, nodeChecked);
    }
   }
  }

/// <summary>
  /// 调出某一操作员的相关权限
  /// </summary>
  /// <param name="treeView">权限树</param>
  /// <param name="PopeArray">模块ID</param>
  private void CallRecursive(TreeView treeView,string [] PopeArray)
  {
   TreeNodeCollection nodes = treeView.Nodes;
   foreach (TreeNode n in nodes)
   {
    //n.Checked =true;
    PrintRecursive(n,PopeArray);
   }
  }

  /// <summary>
  /// 递归调用
  /// </summary>
  /// <param name="treeNode">节点</param>
  /// <param name="PopeArray">模块ID</param>
  private void PrintRecursive(TreeNode treeNode,string [] PopeArray)
  {
   foreach (TreeNode tn in treeNode.Nodes)
   {
    foreach (string str in PopeArray)
    {
     if (str.Trim().ToString()==((COM.JS.Park.DMT.DMTModule)tn.Tag).MOD_ID.Trim().ToString())
     {
      tn.Checked =true;
      tn.Parent.Checked =true;
     }
    }
    PrintRecursive(tn,PopeArray);
   }
  }

/// <summary>
  /// 设置树节点背景色
  /// </summary>
  /// <param name="treeNode"></param>
  /// <param name="_flag"></param>
  private void SetTreeBackRecursive(TreeNode treeNode,bool _flag)
  {
   foreach (TreeNode tn in treeNode.Nodes)
   {
    if (_flag==true)
     tn.BackColor=System.Drawing.Color.White;
    else
     tn.BackColor=System.Drawing.Color.FromArgb(((System.Byte)(231)), ((System.Byte)(240)), ((System.Byte)(250)));
    SetTreeBackRecursive(tn,_flag);
   }

  }

#region 树节点拖动
  private void trv_ParkTree_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
  {
   //取源节点信息 获得进行"Drag"操作中拖动的字符串
   TreeNode sourceNode=this.trv_ParkTree.SelectedNode;
   string  dummy  =  "temp"  ;
   string  source_Text  =  (  string  )  e.Data.GetData  (  dummy.GetType  (  )  )  ;
   string  target_Text="";
   int source_id=0;
   source_Text  =  source_Text.Substring  (  source_Text.IndexOf  (  ":"  )  +  1  ).Trim  (  )  ;
   string soruceNodeType=this.checkNode(sourceNode);
   TreeNode  DragNode  =  new  TreeNode  ( source_Text )  ; //新建一个节点
   DragNode.Tag=sourceNode.Tag;
   switch (soruceNodeType)  //根据源节点类型取相关ID
   {
    case "ParkNode":
     source_id=((OMTPark)this.trv_ParkTree.SelectedNode.Tag).PRK_ID;
     DragNode.ImageIndex =0;
     break;
    case "RootParkNode":
     source_id=((OMTPark)this.trv_ParkTree.SelectedNode.Tag).PRK_ID;
     soruceNodeType="ParkNode";
     DragNode.ImageIndex =1;
     break;
    case "ComputerNode":
     source_id=((OMTComputer)this.trv_ParkTree.SelectedNode.Tag).COM_ID;
     DragNode.ImageIndex =2;
     break;
    case "MachineNode":
     source_id=((OMTMachine)this.trv_ParkTree.SelectedNode.Tag).MAC_NO;
     DragNode.ImageIndex =3;
     break;
    default:
     break;
   }
   //MessageBox.Show (source_Text+" "+soruceNodeType);
   //取目标节点信息
   m_Position.X  =  e.X  ;
   m_Position.Y  =  e.Y  ;
   m_Position  =  trv_ParkTree.PointToClient (  m_Position  )  ;
   TreeNode  DropNode  =  this.trv_ParkTree.GetNodeAt  ( m_Position )  ;
   string targetNodeType=this.checkNode(DropNode);
   target_Text=DropNode.Text.Trim();
   //MessageBox.Show (DropNode.Text);
   //在目标组件中加入以此字符串为标题的项目
   if  (  DropNode  !=  null && source_id.ToString()!="" )
   {     
    if ( (soruceNodeType=="ComputerNode" && targetNodeType=="RootParkNode") || (soruceNodeType=="ParkNode" && targetNodeType=="ParkNode") || (soruceNodeType=="ComputerNode" && targetNodeType=="ParkNode") || (soruceNodeType=="MachineNode" && targetNodeType=="ComputerNode") )
    {
     if (source_Text==target_Text)
     {
      MessageBox.Show (this,"拖放位置不对","提示",MessageBoxButtons.OK,MessageBoxIcon.Exclamation);
      return;
     }
     if (targetNodeType=="RootParkNode" &&  soruceNodeType=="ParkNode")
     {
      ((OMTPark)sourceNode.Tag).PPARK_ID=((OMTPark)DropNode.Tag).PRK_ID;
      ((OMTPark)sourceNode.Tag).store();
     }
     else if (targetNodeType=="ParkNode" && soruceNodeType=="ComputerNode" || targetNodeType=="RootParkNode" && soruceNodeType=="ComputerNode")
     {
      ((OMTComputer)sourceNode.Tag).PRK_ID =((OMTPark)DropNode.Tag).PRK_ID;
      ((OMTComputer)sourceNode.Tag).store();
     }
     else if (targetNodeType=="ComputerNode" && soruceNodeType=="MachineNode")
     {
      ((OMTMachine)sourceNode.Tag).COM_ID=((OMTComputer)DropNode.Tag).COM_ID;
      ((OMTMachine)sourceNode.Tag).store();
     }
     initLoadTree();
     //DropNode.Nodes.Insert(DropNode.Index+1  , DragNode ); //插入到目标节点
     
     //this.trv_ParkTree.SelectedNode.Remove(); 
    }
    else
    {
     MessageBox.Show ("拖放位置不正确","提示",MessageBoxButtons.OK,MessageBoxIcon.Exclamation);
    }
   }
  }

  private void trv_ParkTree_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)
  {
   //判断是否目前拖动的数据是字符串,如果是,则拖动字符串对目的组件进行拷贝
   if  (  e.Data.GetDataPresent  (  DataFormats.Text  )  )
   {
    e.Effect  =  DragDropEffects.Move  ;
   }
   else
   {
    e.Effect  =  DragDropEffects.None  ;
   }
  
  }

  private void trv_ParkTree_ItemDrag(object sender, System.Windows.Forms.ItemDragEventArgs e)
  {
   //判断是否是鼠标右键按动    
   if(this.trv_ParkTree.SelectedNode==null)
   {
    return;
   }
   else if( this.trv_ParkTree.SelectedNode.Parent==null)
   {
    return;
   }
   else if(  e.Button  ==  MouseButtons.Right  ) 
   {
    return;
   }

   string  strItem  =  e.Item.ToString  (  )  ; //开始进行"Drag"操作
   //DoDragDrop  (  strItem  ,  DragDropEffects.Copy  |  DragDropEffects.Move  )  ;
   DoDragDrop(strItem,  DragDropEffects.Move);
  
  }

  private void trv_ParkTree_DragOver(object sender, System.Windows.Forms.DragEventArgs e)
  {
  
  
  }
  #endregion

本文地址:http://com.8s8s.com/it/it41592.htm