Esempio n. 1
0
        /// <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);
            }
        }
Esempio n. 2
0
        /// <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());
            }
        }
Esempio n. 3
0
        /// <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);
            }
        }