Пример #1
0
        public static List <TriStateTreeNode> GetSubTriStateNodes(DirectoryNode dir, bool checkboxVisible, bool cycle)
        {
            List <TriStateTreeNode> tris  = new List <TriStateTreeNode>();
            List <KellNode>         nodes = dir.GetSub();

            foreach (DirectoryNode node in nodes)
            {
                if (cycle)
                {
                    TriStateTreeNode tri = new TriStateTreeNode(node.Name, GetSubTriStateNodes(node, checkboxVisible, cycle).ToArray())
                    {
                        Name = node.ID, Tag = node.Tag, ImageIndex = node.IsLeaf ? dir.FileImageIndex : dir.DirImageIndex, CheckboxVisible = checkboxVisible
                    };
                    tris.Add(tri);
                }
                else
                {
                    TriStateTreeNode tri = new TriStateTreeNode(node.Name)
                    {
                        Name = node.ID, Tag = node.Tag, ImageIndex = node.IsLeaf ? dir.FileImageIndex : dir.DirImageIndex, CheckboxVisible = checkboxVisible
                    };
                    tris.Add(tri);
                }
            }
            return(tris);
        }
Пример #2
0
        private static TriStateTreeNode GetNodeByName(string name, TriStateTreeNode treenode, bool ignoreCase)
        {
            TriStateTreeNode triNode = null;

            foreach (TriStateTreeNode node in treenode.Nodes)
            {
                if (ignoreCase)
                {
                    if (node.Name.ToLower() == name.ToLower())
                    {
                        triNode = node;
                        break;
                    }
                    else
                    {
                        GetNodeByName(name, node, true);
                    }
                }
                else
                {
                    if (node.Name == name)
                    {
                        triNode = node;
                        break;
                    }
                    else
                    {
                        GetNodeByName(name, node, false);
                    }
                }
            }
            return(triNode);
        }
Пример #3
0
        /// <summary>
        /// 取消选中或选中事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void updateTriSatateTreeView_AfterCheck(object sender, TreeViewEventArgs e)
        {
            //只处理鼠标点击引起的状态变化
            if (e.Action == TreeViewAction.ByMouse)
            {
                if (e.Node is TriStateTreeNode)
                {
                    List <TreeNode>  fileTreeNodes = new List <TreeNode>();
                    TriStateTreeNode tsTreeNode    = e.Node as TriStateTreeNode;
                    if (tsTreeNode.Nodes.Count == 0)
                    {
                        fileTreeNodes.Add(tsTreeNode);
                    }
                    if (tsTreeNode.Checked == false)
                    {
                        List <FileInfo> updateFileInfo = new List <FileInfo>();
                        foreach (var updatefile in this._updateFiles)
                        {
                            if (fileTreeNodes.Exists(n => n.Text == updatefile.Name))
                            {
                                updateFileInfo.Add(updatefile);
                            }
                        }

                        foreach (var updateFile in updateFileInfo)
                        {
                            this._updateFiles.Remove(updateFile);
                        }
                    }
                }
            }
        }
Пример #4
0
        public static TriStateTreeNode KellNode2TriStateTreeNode(KellNode kellNode, bool checkboxVisible, int selectedImageIndex)
        {
            TriStateTreeNode tri = new TriStateTreeNode()
            {
                Name = kellNode.ID, Text = kellNode.Name, Tag = kellNode.Tag, CheckboxVisible = checkboxVisible, SelectedImageIndex = selectedImageIndex
            };

            return(tri);
        }
Пример #5
0
        public static TriStateTreeNode KellNode2TriStateTreeNode(KellNode kellNode, bool checkboxVisible)
        {
            TriStateTreeNode tri = new TriStateTreeNode()
            {
                Name = kellNode.ID, Text = kellNode.Name, Tag = kellNode.Tag, CheckboxVisible = checkboxVisible
            };

            return(tri);
        }
Пример #6
0
        public static TriStateTreeNode KellNode2TriStateTreeNode(KellNode kellNode)
        {
            TriStateTreeNode tri = new TriStateTreeNode()
            {
                Name = kellNode.ID, Text = kellNode.Name, Tag = kellNode.Tag
            };

            return(tri);
        }
Пример #7
0
        void TR_Groups_E_OnParentNodeClicked(object sender, TreeNodeClickEventArg e)
        {
            TriStateTreeNode selectedNode = TR_Groups.SelectedNode as TriStateTreeNode;

            if (selectedNode.Parent == null)
            {
                //RootNodeContextClicked(selectedNode, text, index);
            }
            else
            {
                /*
                 * if (selectedNode.Parent.Equals(_peersRoot)) //peer
                 * {
                 *  int rowIndex = _peersRoot.Nodes.IndexOf(selectedNode);
                 *  _activatedPeer = _peers[rowIndex];
                 *  if (E_PeerSelected != null) E_PeerSelected(selectedNode, new PeerSelectedEventArgs(selectedNode.Text, _peers[rowIndex]));
                 *
                 *
                 * }
                 * else
                 */
                if (selectedNode.Parent.Equals(_groupsRoot))     //group
                {
                    //int peerIndex = _peers.IndexOf(_activatedPeer);
                    TriStateTreeNode peerNode  = _activatedPeerNode;// _peersRoot.Nodes[peerIndex] as TriStateTreeNode;
                    string           groupName = selectedNode.Text;
                    getActivatedPeer().SetMsgList(groupName);
                    peerNode.Text = peerNode.Name + "[" + groupName + "]";


                    if (E_GroupSelected != null)
                    {
                        E_GroupSelected(selectedNode, new GroupSelectedEventArgs(groupName, _groupsDir + "\\" + groupName));
                    }
                }

                /*
                 * else if (selectedNode.Parent.Parent != null && selectedNode.Parent.Parent.Equals(_groupsRoot))//packet selected
                 * {
                 *  int peerIndex = _peers.IndexOf(_activatedPeer);
                 *  TriStateTreeNode peerNode = _peersRoot.Nodes[peerIndex] as TriStateTreeNode;
                 *
                 *  string groupName = selectedNode.Parent.Text;
                 *  String groupPath = _groupsDir + "\\" + groupName;
                 *  _activatedPeer.SetMsgList(groupName, _groupMsgList[groupName]);
                 *  peerNode.Text = peerNode.Name + "[" + groupName + "]";
                 *
                 *  if (E_GroupSelected != null) E_GroupSelected(selectedNode, new GroupSelectedEventArgs(selectedNode.Parent.Text, groupPath));
                 *  String packetPath = groupPath + "\\" + selectedNode.Text;
                 *  if (E_PacketChanged != null) E_PacketChanged(selectedNode, new PacketChangedEventArgs(selectedNode.Text, packetPath));
                 * }
                 */
            }
        }
Пример #8
0
 public static void LoadDirectory(DirectoryNode dir, TriStateTreeNode treenode, bool cycle, bool checkboxVisible = true)
 {
     if (cycle)
     {
         List <KellNode> sub = LoadDirectoryCycle(dir);
         LoadTreeNodes(dir, treenode, sub, cycle);
     }
     else
     {
         List <KellNode> nodes = dir.GetSub();
         LoadTreeNodes(dir, treenode, nodes, cycle);
     }
 }
Пример #9
0
        public static TriStateTreeNode GetNodeByName(string name, TriStateTreeView treeview, bool ignoreCase)
        {
            TriStateTreeNode findNode = null;

            foreach (TriStateTreeNode node in treeview.Nodes)
            {
                findNode = GetNodeByName(name, node, ignoreCase);
                if (findNode != null)
                {
                    break;
                }
            }
            return(findNode);
        }
Пример #10
0
        /// <summary>
        /// 获取子集
        /// </summary>
        /// <returns></returns>
        private static List <TriStateTreeNode> GetCheckedNodes(TriStateTreeNode treeNode)
        {
            List <TriStateTreeNode> childNodeList = new List <TriStateTreeNode>();

            foreach (TriStateTreeNode childNode in treeNode.Nodes)
            {
                childNodeList.AddRange(GetCheckedNodes(childNode));
            }
            if (treeNode.Nodes.Count == 0 && treeNode.Checked == true)
            {
                childNodeList.Add(treeNode);
            }
            return(childNodeList);
        }
Пример #11
0
 public static void LoadTreeNodes(DirectoryNode dir, TriStateTreeNode treenode, List <KellNode> nodes, bool cycle, bool checkboxVisible = true)
 {
     foreach (DirectoryNode node in nodes)
     {
         if (cycle)
         {
             treenode.Nodes.Add(new TriStateTreeNode(node.Name, Common.GetSubTriStateNodes(node, checkboxVisible, cycle).ToArray())
             {
                 Name = node.ID, Tag = node.Tag, ImageIndex = node.IsLeaf ? dir.FileImageIndex : dir.DirImageIndex, CheckboxVisible = checkboxVisible
             });
         }
         else
         {
             treenode.Nodes.Add(new TriStateTreeNode(node.Name)
             {
                 Name = node.ID, Tag = node.Tag, ImageIndex = node.IsLeaf ? dir.FileImageIndex : dir.DirImageIndex, CheckboxVisible = checkboxVisible
             });
         }
     }
 }
Пример #12
0
        public void AdicionarControles(TriStateTreeNode nodeModulo, int idPai, List <UsuarioPermissoes> lstPermissoes)
        {
            List <UsuarioPermissoes> lstPermissoesControles = new List <UsuarioPermissoes>();

            lstPermissoesControles = lstPermissoes.Where(perm => perm.idControlePai == idPai).ToList();

            if (lstPermissoesControles.Count > 0)
            {
                foreach (UsuarioPermissoes itemPermissao in lstPermissoesControles)
                {
                    TriStateTreeNode nodeControle = new TriStateTreeNode(" " + itemPermissao.descricaoControle);
                    nodeControle.Name        = itemPermissao.idControle.ToString();
                    nodeControle.IsContainer = !itemPermissao.objetoTela;
                    nodeControle.Collapse();

                    this.AdicionarControles(nodeControle, itemPermissao.idControle, lstPermissoes);

                    nodeModulo.Nodes.Add(nodeControle);
                }
            }
        }
Пример #13
0
        private void ConfigureTreeView(string path, string customizeSlnFileName)
        {
            this.updateTriSatateTreeView.Nodes.Clear();

            try
            {
                //Tfs帮助类
                tfsHelper = new TFSHelper(Directory.GetParent(path).FullName, customizeSlnFileName);
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
                return;
            }
            List <FileInfo> fileInfos = tfsHelper.GetPendingChange();

            if (fileInfos != null && fileInfos.Count > 0)
            {
                IEnumerable <IGrouping <string, FileInfo> > dictionarys = fileInfos.GroupBy(n => n.DirectoryName);

                foreach (var dictionary in dictionarys)
                {
                    TriStateTreeNode treeNode1 = new TriStateTreeNode();
                    treeNode1.Text            = dictionary.Key.Replace(path + "\\", "");
                    treeNode1.Text            = dictionary.Key.Replace(path, "");
                    treeNode1.CheckboxVisible = true;
                    treeNode1.Checked         = true;
                    treeNode1.IsContainer     = true;//文件夹
                    foreach (var metadataFile in dictionary)
                    {
                        TriStateTreeNode treeNode2 = new TriStateTreeNode(metadataFile.Name, 2, 2);
                        treeNode2.Checked = true;
                        treeNode2.Tag     = metadataFile;
                        treeNode1.Nodes.Add(treeNode2);
                    }
                    this.updateTriSatateTreeView.Nodes.Add(treeNode1);
                }
            }
        }
Пример #14
0
        void TR_Groups_E_ContextMenuEndClicked(object sender, string text, int index, TriStateTreeNode selectedNode, object MenuItem)
        {
            if (selectedNode.Parent == null)
            {
                RootNodeContextClicked(selectedNode, text, index);
            }
            else
            {
                if (selectedNode.Parent.Equals(_peersRoot))
                {
                    int rowIndex = _peersRoot.Nodes.IndexOf(selectedNode);
                    //if(E_PeerSelected!=null) E_PeerSelected(selectedNode, new PeerSelectedEventArgs(selectedNode.Text, _peers[rowIndex]));
                }
                else if (selectedNode.Parent.Equals(_groupsRoot))
                {
                    int rowIndex = _groupsRoot.Nodes.IndexOf(selectedNode);

                    //if (E_GroupSelected != null) E_GroupSelected(selectedNode, new GroupSelectedEventArgs(selectedNode.Text, _groupsDir));
                }
                else if (selectedNode.Parent.Parent != null && selectedNode.Parent.Parent.Equals(_groupsRoot))//packet selected
                {
                }
            }
        }
Пример #15
0
        private void CarregarAcessos()
        {
            this.Cursor = Cursors.WaitCursor;

            try
            {
                lstPermissoes = bizUsuario.PesquisarPermissoesUsuario(new UsuarioPermissoes()
                {
                    idUsuario = usuarioSelecionado.idUsuario
                });

                if (lstPermissoes.Count == 0)
                {
                    return;
                }

                if (usuarioSelecionado.idUsuario == 0)
                {
                    lstPermissoes = lstPermissoes.Where(x => x.idUsuario == lstPermissoes[0].idUsuario).ToList();
                }

                foreach (UsuarioPermissoes itemPermissao in lstPermissoes)
                {
                    if (itemPermissao.idControlePai == 0)
                    {
                        TriStateTreeNode nodeModulo = new TriStateTreeNode(" " + itemPermissao.descricaoControle);
                        nodeModulo.IsContainer = true;
                        nodeModulo.Name        = itemPermissao.idControle.ToString();

                        this.AdicionarControles(nodeModulo, itemPermissao.idControle, lstPermissoes);

                        this.tvAcesso.SuspendLayout();
                        this.tvAcesso.Nodes.Add(nodeModulo);
                        this.tvAcesso.ResumeLayout();
                    }
                }

                foreach (UsuarioPermissoes permissao in lstPermissoes)
                {
                    TriStateTreeNode nodeSelecionado = (TriStateTreeNode)tvAcesso.Nodes.Find(permissao.idControle.ToString(), true)[0];
                    nodeSelecionado.Checked = permissao.Habilitado;
                }
            }
            catch (SqlException)
            {
                MessageBox.Show(helper.RetornarMensagemPadraoErroAcessoBD(), "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            catch (Exception ex)
            {
                MessageBox.Show(helper.RetornarMensagemPadraoErroGenerico(), "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);

                LogErro logErro = new LogErro()
                {
                    mensagemErro = ex.ToString()
                };

                bizLogErro.IncluirLogErro(logErro);
            }

            this.Cursor = Cursors.Default;
        }
Пример #16
0
        void RootNodeContextClicked(TriStateTreeNode node, String text, int index)
        {
            if (node.Equals(_peersRoot))
            {
                switch (text)
                {
                case "새 Peer 생성":
                    InputForm    input  = new InputForm();
                    DialogResult result = input.ShowDialog("New Packet Name");
                    if (result == DialogResult.Abort || result == DialogResult.Cancel || input.InputText.Trim().Length == 0)
                    {
                        return;
                    }
                    String newPacketPath = _peersDir + "\\" + input.InputText + ".xml";
                    if (File.Exists(newPacketPath))
                    {
                        MessageBox.Show("중복되는 이름이 있습니다.");
                        return;
                    }

                    Con_Peer peer = new Con_Peer(newPacketPath);

                    TriStateTreeNode peerNode = TR_Groups.AddChild(_peersRoot, input.InputText);
                    peerNode.RelativeObject["peer"] = peer;
                    if (_groupsRoot.Nodes.Count > 0)
                    {
                        String groupName = _groupsRoot.Nodes[0].Text;
                        peer.SetMsgList(groupName);
                    }
                    break;
                }
            }
            else if (node.Equals(_groupsRoot))
            {
                switch (text)
                {
                case "새 그룹 생성":
                    FormAdders.InputForm input  = new InputForm();
                    DialogResult         result = input.ShowDialog("Report 사용자이름 입력");

                    if (result == System.Windows.Forms.DialogResult.Cancel || result == System.Windows.Forms.DialogResult.Cancel)
                    {
                        return;
                    }
                    if (input.InputText.Trim().Length == 0)
                    {
                        return;
                    }
                    string newDir = _groupsDir + "\\" + input.InputText;
                    if (Directory.Exists(newDir))
                    {
                        MessageBox.Show("이름이 중복됩니다.");
                        return;
                    }
                    TriStateTreeNode child = TR_Groups.AddChild(_groupsRoot, input.InputText);
                    TR_Groups.AddContextMenuItemParentNode(child, "새 패킷 생성");

                    Directory.CreateDirectory(newDir);

                    _groupPaths = Directory.GetDirectories(_groupsDir);
                    break;
                }
            }
        }
Пример #17
0
 void TR_Groups_E_ContextMenuParentClicked(object sender, string text, int index, TriStateTreeNode selectedNode, object MenuItem)
 {
     if (selectedNode.Parent == null)
     {
         RootNodeContextClicked(selectedNode, text, index);
     }
     else if (selectedNode.Parent.Equals(_groupsRoot))
     {
         int rowIndex = _groupsRoot.Nodes.IndexOf(selectedNode);
         switch (text)
         {
         case "새 패킷 생성":
             MakeNewPacket(selectedNode.Text);
             break;
         }
         //if (E_GroupSelected != null) E_GroupSelected(selectedNode, new GroupSelectedEventArgs(selectedNode.Text, _groupsDir));
     }
 }
Пример #18
0
        public void loadGroups()
        {
            TR_Groups.ClearAllItems();



            _peersRoot = TR_Groups.AddRoot("Peers");
            //TR_Groups.AddContextMenuItemEndNode(_peersRoot, "새 Peer 생성");
            TR_Groups.AddContextMenuItemParentNode(_peersRoot, "새 Peer 생성");

            String[] peerPaths = Directory.GetFiles(_peersDir);

            for (int i = 0; i < peerPaths.Length; i++)
            {
                Con_Peer peer = new Con_Peer(peerPaths[i]);
                String   name = peerPaths[i].Substring(peerPaths[i].LastIndexOf("\\") + 1);
                name = name.Substring(0, name.LastIndexOf("."));// .xml을 떼어줌..
                TriStateTreeNode node = TR_Groups.AddChild(_peersRoot, name);
                node.RelativeObject["peer"] = peer;
                peer.SetName(name);
                _activatedPeerNode = node;


                //_peersGroup[peer] = name;//마지막 읽은 group을 _activatedPeer에 배정한다.
                //peer.SetMsgList(name, new ConMsgList(name));
            }

            String[] grpPaths = Directory.GetDirectories(_groupsDir);

            _groupsRoot = TR_Groups.AddRoot("Groups");
            //TR_Groups.AddContextMenuItemEndNode(_groupsRoot, "새 그룹 생성");
            TR_Groups.AddContextMenuItemParentNode(_groupsRoot, "새 그룹 생성");

            for (int i = 0; i < grpPaths.Length; i++)
            {
                String           name = grpPaths[i].Substring(grpPaths[i].LastIndexOf("\\") + 1);
                TriStateTreeNode grp  = TR_Groups.AddChild(_groupsRoot, name);
                TR_Groups.AddContextMenuItemParentNode(grp, "새 패킷 생성");

                grp.RelativeObject["dir"] = grpPaths[i];

                String[] packets = Directory.GetDirectories(grpPaths[i]);

                for (int p = 0; p < packets.Length; p++)
                {
                    String           childName = packets[p].Substring(packets[p].LastIndexOf("\\") + 1);
                    TriStateTreeNode childNode = TR_Groups.AddChild(grp, childName);
                    childNode.RelativeObject["dir"] = packets[p];
                    TR_Groups.AddContextMenuItemEndNode(childNode, "편집");
                    TR_Groups.AddContextMenuItemEndNode(childNode, "삭제");
                    TR_Groups.AddContextMenuItemEndNode(childNode, "복사본만들기");
                }
            }

            for (int i = 0; i < _peersRoot.Nodes.Count; i++)
            {
                if (_groupsRoot.Nodes.Count > 0)
                {
                    TriStateTreeNode node = _peersRoot.Nodes[i];
                    Con_Peer         peer = node.RelativeObject["peer"] as Con_Peer;
                    XmlDocument      xDoc;
                    XmlNode          root = XmlHandlers.XmlGetter.RootNode(out xDoc, peerPaths[i]);
                    XmlNode          Envs = XmlHandlers.XmlGetter.Child(root, "Envs");

                    String groupName = _groupsRoot.Nodes[0].Text;
                    bool   isFound   = false;
                    foreach (XmlNode anEnv in Envs.ChildNodes)
                    {
                        string name = XmlHandlers.XmlGetter.Attribute(anEnv, "Name");
                        if (name.ToLower().Equals("groupname"))
                        {
                            for (int g = 0; g < _groupsRoot.Nodes.Count; g++)
                            {
                                if (_groupsRoot.Nodes[g].Text.Equals(anEnv.InnerText))
                                {
                                    groupName = anEnv.InnerText;
                                    isFound   = true;
                                    break;
                                }
                            }
                            if (isFound)
                            {
                                break;
                            }
                        }
                    }

                    _peersGroup[peer] = groupName;
                    node.Text         = peer.Name + "[" + groupName + "]";
                }
            }

            TR_Groups.Refresh();
            _groupsRoot.Expand();
            _peersRoot.Expand();
            TR_Groups.Refresh();
        }
Пример #19
0
        void TR_Groups_E_OnEndNodeClicked(object sender, TreeNodeClickEventArg e)
        {
            TriStateTreeNode selectedNode = TR_Groups.SelectedNode as TriStateTreeNode;

            if (selectedNode.Parent == null)
            {
                //RootNodeContextClicked(selectedNode, text, index);
            }
            else
            {
                if (selectedNode.Parent.Equals(_peersRoot)) //peer
                {
                    //int rowIndex = _peersRoot.Nodes.IndexOf(selectedNode);
                    _activatedPeerNode = selectedNode;

                    if (E_PeerSelected != null)
                    {
                        E_PeerSelected(selectedNode, new PeerSelectedEventArgs(selectedNode.Text, getActivatedPeer()));
                    }
                }
                else if (selectedNode.Parent.Equals(_groupsRoot)) //group
                {
                    TriStateTreeNode peerNode  = _activatedPeerNode;
                    string           groupName = selectedNode.Text;
                    try
                    {
                        getActivatedPeer().SetMsgList(groupName);
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                        return;
                    }
                    peerNode.Text = peerNode.Name + "[" + groupName + "]";


                    if (E_GroupSelected != null)
                    {
                        E_GroupSelected(selectedNode, new GroupSelectedEventArgs(groupName, _groupsDir + "\\" + groupName));
                    }
                }
                else if (selectedNode.Parent.Parent != null && selectedNode.Parent.Parent.Equals(_groupsRoot)) //packet selected
                {
                    TriStateTreeNode peerNode = _activatedPeerNode;                                            // _peersRoot.Nodes[peerIndex] as TriStateTreeNode;

                    string groupName = selectedNode.Parent.Text;
                    String groupPath = _groupsDir + "\\" + groupName;
                    getActivatedPeer().SetMsgList(groupName);
                    peerNode.Text = peerNode.Name + "[" + groupName + "]";

                    if (E_GroupSelected != null)
                    {
                        E_GroupSelected(selectedNode, new GroupSelectedEventArgs(selectedNode.Parent.Text, groupPath));
                    }
                    String packetPath = groupPath + "\\" + selectedNode.Text;
                    if (E_PacketChanged != null)
                    {
                        E_PacketChanged(selectedNode, new PacketChangedEventArgs(selectedNode.Text, packetPath));
                    }
                }
            }
        }
Пример #20
0
        /// <summary>
        /// 打开更新的文件目录
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void RootFileBtn_Click(object sender, EventArgs e)
        {
            this._updateFiles = new List <FileInfo>();
            this.updateTriSatateTreeView.Nodes.Clear();
            string rootPath = this.pathTBx.Text;

            //获取修改当前日期
            _dt = DateTime.Parse(DateTime.Parse(this.updateDateTimePicker.Text).ToString("yyyy/MM/dd"));
            if (string.IsNullOrEmpty(this.pathTBx.Text))
            {
                //选择文件夹
                FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog();
                folderBrowserDialog.SelectedPath = rootProductPath;
                if (folderBrowserDialog.ShowDialog() == DialogResult.OK)
                {
                    //选择的文件夹
                    this.pathTBx.Text = folderBrowserDialog.SelectedPath;
                }
            }
            if (!File.Exists(rootPath + "\\Web.config"))
            {
                MessageBox.Show("请选择产品根目录!");
            }
            else
            {
                //产品TFS
                TFSHelper tfs = new TFSHelper(Directory.GetParent(rootPath).FullName, productSlnFileName);
                _updateFiles.AddRange(GetRootFileName(rootPath));
                _updateFiles.AddRange(GetMetadataFiles(rootPath));
                var pendingFiles = tfs.GetPendingChange();
                //判断产品TFS是否全部签入
                if (pendingFiles.Count > 0)
                {
                    _updateFiles = null;
                    foreach (var item in pendingFiles)
                    {
                        Logging.WriteLog("没有签入的产品文件:", item.FullName);
                    }
                    MessageBox.Show("产品有未签入的数据,不可以迁移二开!");
                    return;
                }
                if (isTip)
                {
                    _updateFiles = null;
                    MessageBox.Show("产品有未签入的元数据,请在建模平台签入后迁移二开!");
                    return;
                }

                _updateFiles.AddRange(GetBinFiles(rootPath));
                _updateFiles.AddRange(GetAppDataFiles(rootPath));
                //获取需要更新的文件夹信息
                foreach (var updateDirectory in _updateDirectorys)
                {
                    openFileName = Path.Combine(rootPath, updateDirectory);
                    _updateFiles.AddRange(GetUpdateFiles(openFileName));
                }


                IEnumerable <IGrouping <string, FileInfo> > dictionarys = _updateFiles.GroupBy(n => n.DirectoryName);
                if (_updateFiles != null && _updateFiles.Count > 0)
                {
                    foreach (var dictionary in dictionarys)
                    {
                        TriStateTreeNode treeNode1 = new TriStateTreeNode();
                        treeNode1.Text            = dictionary.Key.Replace(this.pathTBx.Text + "\\", "");
                        treeNode1.Text            = treeNode1.Text.Replace(this.pathTBx.Text.Replace("00_根目录", ""), "");
                        treeNode1.CheckboxVisible = true;
                        treeNode1.Checked         = true;
                        treeNode1.IsContainer     = true;//文件夹
                        var list = dictionary.OrderBy(n => n.Name);
                        foreach (var metadataFile in list)
                        {
                            TriStateTreeNode treeNode2 = new TriStateTreeNode(metadataFile.Name, 2, 2);
                            treeNode2.Checked = true;
                            treeNode2.Tag     = metadataFile;
                            treeNode1.Nodes.Add(treeNode2);
                        }
                        this.updateTriSatateTreeView.Nodes.Add(treeNode1);
                    }

                    if (this.isTrueCopyRadioBtn.Checked)
                    {
                        this._updateFiles = TriStateTreeNodeHelper.GetTreeNodeChecked(this.updateTriSatateTreeView.Nodes);
                        if (this._updateFiles == null)
                        {
                            MessageBox.Show("请选择产品修改的信息!");
                            return;
                        }
                        if (this._updateFiles.Count == 0)
                        {
                            MessageBox.Show("没有要复制编辑签出的文件!");
                            return;
                        }
                        progressValue = 0;
                        customizePath = this.customizePathCBX.Text;
                        this.worker.RunWorkerAsync();                    // 运行 backgroundWorker 组件
                        ProgressBar form = new ProgressBar(this.worker); // 显示进度条窗体
                        form.ShowDialog(this);
                    }
                }
            }
        }