/// <summary> /// 删除项 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void DeleteItem(object sender, EventArgs e) { try { if (GlobalParams.myJobTreeView.SelectedNode == null) { return; } string nodeText = GlobalParams.myJobTreeView.SelectedNode.Text.ToString(); int level = GlobalParams.myJobTreeView.SelectedNode.Level; string fatherNodeText = string.Empty; //如果是子节点 if (level == 1) { fatherNodeText = GlobalParams.myJobTreeView.SelectedNode.Parent.Text; } foreach (TreeNode toolNode in GlobalParams.myJobTreeView.Nodes) { if (level == 1) { if (toolNode.Text == fatherNodeText) { foreach (var itemNode in toolNode.Nodes) { if (itemNode != null) { if (((TreeNode)itemNode).Text == nodeText) { //移除连线集合中的这条连线 for (int i = 0; i < D_itemAndSource.Count; i++) { if (((TreeNode)itemNode) == D_itemAndSource.Keys.ToArray()[i] || ((TreeNode)itemNode) == D_itemAndSource[D_itemAndSource.Keys.ToArray()[i]]) { D_itemAndSource.Remove(D_itemAndSource.Keys.ToArray()[i]); } } ((TreeNode)itemNode).Remove(); GlobalParams.myJobTreeView.SelectedNode = null; } } } } } else { if (((TreeNode)toolNode).Text == nodeText) { ((TreeNode)toolNode).Remove(); break; } } } //如果是父节点 if (level == 0) { for (int i = 0; i < L_toolList.Count; i++) { if (L_toolList[i].toolName == nodeText) { try { //移除连线集合中的这条连线 for (int j = D_itemAndSource.Count - 1; j >= 0; j--) { if (nodeText == D_itemAndSource.Keys.ToArray()[j].Parent.Text || nodeText == D_itemAndSource[D_itemAndSource.Keys.ToArray()[j]].Parent.Text) { D_itemAndSource.Remove(D_itemAndSource.Keys.ToArray()[j]); } } } catch { } L_toolList.RemoveAt(i); } } } else { for (int i = 0; i < L_toolList.Count; i++) { if (L_toolList[i].toolName == fatherNodeText) { for (int j = 0; j < L_toolList[i].toolInput.Count; j++) { if (L_toolList[i].toolInput[j].value.ToString() == Regex.Split(nodeText, "《")[0]) { L_toolList[i].RemoveInputIO(Regex.Split(nodeText, "《")[0]); } } for (int j = 0; j < L_toolList[i].toolOutput.Count; j++) { if (L_toolList[i].toolOutput[j].IOName == nodeText.Substring(3)) { L_toolList[i].RemoveOutputIO(nodeText.Substring(3)); } } } } } } catch (Exception ex) { //LogHelper.SaveErrorInfo(ex); } }
/// <summary> /// 释放被拖动的节点 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> public void TvwJob_DragDrop(object sender, DragEventArgs e)//拖动 { try { //获得拖放中的节点 TreeNode moveNode = (TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode"); //根据鼠标坐标确定要移动到的目标节点 System.Drawing.Point pt; TreeNode targeNode; // 目标节点 pt = ((TreeView)(sender)).PointToClient(new System.Drawing.Point(e.X, e.Y)); targeNode = tvwOnWorkJob.GetNodeAt(pt); //如果目标节点无子节点则添加为同级节点,反之添加到下级节点的未端 if (moveNode == targeNode) //若是把自己拖放到自己,不可,返回 { return; } if (targeNode == null) //目标节点为null,就是把节点拖到了空白区域,不可,直接返回 { return; } if (moveNode.Level == 1 && targeNode.Level == 1 && moveNode.Parent == targeNode.Parent) //都是输入输出节点,内部拖动排序 { moveNode.Remove(); targeNode.Parent.Nodes.Insert(targeNode.Index, moveNode); return; } if (moveNode.Level == 0) // 被拖动的是子节点,也就是工具节点 { if (targeNode.Level == 0) // 目标也是工具节点 { moveNode.Remove(); tvwOnWorkJob.Nodes.Insert(targeNode.Index, moveNode); IToolInfo temp = new IToolInfo(); for (int i = 0; i < L_toolList.Count; i++) { if (L_toolList[i].toolName == moveNode.Text) { SwapDataFun(L_toolList, i, targeNode.Index); break; } } } else { // 目标是子节点,则移动到该子节点的父节点的下一个节点上 moveNode.Remove(); tvwOnWorkJob.Nodes.Insert(targeNode.Parent.Index + 1, moveNode); for (int i = 0; i < L_toolList.Count; i++) { if (L_toolList[i].toolName == moveNode.Text) { SwapDataFun(L_toolList, i, targeNode.Parent.Index); break; } } } } else //被拖动的是输入输出节点 { if (targeNode.Level == 0 && GetToolInfoByToolName(JobName, targeNode.Text).toolType == ToolType.Output) { // 如果目标节点是工具节点,并且工具节点类型为可接收输入的节点,则直接将输出添加,先不考虑该情况 //string result = moveNode.Parent.Text + " . -->" + moveNode.Text.Substring(3); //GetToolInfoByToolName(jobName, targeNode.Text).input.Add(new ToolIO("<--" + result, "", DataType.String)); //TreeNode node = targeNode.Nodes.Add("", "<--" + result, 26, 26); //node.ForeColor = Color.DarkMagenta; //D_itemAndSource.Add(node, moveNode); //targeNode.Expand(); //DrawLine(); return; } else if (targeNode.Level == 0) { return; } //连线前首先要判断被拖动节点是否为输出项,目标节点是否为输入项 if (moveNode.Text.Substring(0, 3) != "-->" || targeNode.Text.Substring(0, 3) != "<--") { myFormLog.ShowLog("拖动类型不匹配!"); return; } //连线前要判断被拖动节点和目标节点的数据类型是否一致 if ((DataType)moveNode.Tag != (DataType)targeNode.Tag) { myFormLog.ShowLog("被拖动节点和目标节点数据类型不一致,不可关联"); return; } string input = targeNode.Text; if (input.Contains("《")) //表示已经连接了源 { input = Regex.Split(input, "《")[0]; } else //第一次连接源就需要添加到输入输出集合 { D_itemAndSource.Add(targeNode, moveNode); } GetToolInfoByToolName(this.JobName, targeNode.Parent.Text).GetInput(input.Substring(3)).value = "《- " + moveNode.Parent.Text + " . " + moveNode.Text.Substring(3); targeNode.Text = input + "《- " + moveNode.Parent.Text + " . " + moveNode.Text.Substring(3); DrawLine(); //移除拖放的节点 if (moveNode.Level == 0) { moveNode.Remove(); } } //更新当前拖动的节点选择 tvwOnWorkJob.SelectedNode = moveNode; //展开目标节点,便于显示拖放效果 targeNode.Expand(); } catch (Exception ex) { myFormLog.ShowLog("释放节点出错,原因: " + ex.Message + ex.StackTrace.ToString()); } }
/// <summary> /// 删除连线及值传递 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void DeleteLine(object sender, EventArgs e) { try { if (GlobalParams.myJobTreeView.SelectedNode == null) { return; } string nodeText = GlobalParams.myJobTreeView.SelectedNode.Text.ToString(); int level = GlobalParams.myJobTreeView.SelectedNode.Level; string fatherNodeText = string.Empty; foreach (TreeNode toolNode in GlobalParams.myJobTreeView.Nodes) { if (level == 1) { fatherNodeText = GlobalParams.myJobTreeView.SelectedNode.Parent.Text; if (toolNode.Text == fatherNodeText) { foreach (var itemNode in toolNode.Nodes) { if (itemNode != null) { if (((TreeNode)itemNode).Text == nodeText) { // 移除连线集合中的这条连线 for (int i = 0; i < D_itemAndSource.Count; i++) { if (((TreeNode)itemNode) == D_itemAndSource.Keys.ToArray()[i] || ((TreeNode)itemNode) == D_itemAndSource[D_itemAndSource.Keys.ToArray()[i]]) { D_itemAndSource.Remove(D_itemAndSource.Keys.ToArray()[i]); } } // 修改节点的显示 for (int i = 0; i < L_toolList.Count; i++) { if (L_toolList[i].toolName == fatherNodeText) { for (int j = 0; j < L_toolList[i].toolInput.Count; j++) { string last = Regex.Split(nodeText, "《")[1]; // "《"后边的部分 string ConnectString = "《" + last; // 拼接后字符 if (L_toolList[i].toolInput[j].value.ToString() == ConnectString) { string source = Regex.Split(nodeText, "《")[0]; // "《"之前的部分,即未连线初始部分 L_toolList[i].toolInput[j].value = null; //重新置null ((TreeNode)itemNode).Text = source; } } for (int j = 0; j < L_toolList[i].toolOutput.Count; j++) { if (L_toolList[i].toolOutput[j].IOName == nodeText.Substring(3)) { L_toolList[i].RemoveOutputIO(nodeText.Substring(3)); } } } } } } } } } } } catch (Exception ex) { //LogHelper.SaveErrorInfo(ex); } }