private void UpdateCommands()
 {
     FindSteamFolder.RaiseCanExecuteChanged();
     AddFolder.RaiseCanExecuteChanged();
     RemoveFolder.RaiseCanExecuteChanged();
     Search.RaiseCanExecuteChanged();
     DeletePackages.RaiseCanExecuteChanged();
 }
        public void Managing_list_folders(TreeNode node, bool ClsChildNodes)
        {
            if (node.Checked)
            {
                if (!list_folders.ContainsKey(node.Tag))
                {
                    list_folders.Add(node.Tag, node.Tag);

                    if (AddFolder != null)
                    {
                        AddFolder.Invoke(node.Tag);
                    }
                }

                Hashtable to_remove = new Hashtable(20);

                foreach (object path in list_folders.Keys)
                {
                    string input   = string.Empty;
                    string pattern = string.Empty;

                    if (path.ToString().Length > node.Tag.ToString().Length)
                    {
                        input   = path.ToString();
                        pattern = node.Tag.ToString();
                    }
                    else
                    {
                        input   = node.Tag.ToString();
                        pattern = path.ToString();
                    }

                    bool cmp = input.Contains(pattern);                                                                                //если выбранная папка ближе к корню, чем ранее выбранная
                    if ((cmp) &&                                                                                                       //так вот если она есть
                        (path.ToString() != node.Tag.ToString()) &&                                                                    //и не равна самой себе
                        (path.ToString().Split(Convert.ToChar("\\")).Length != node.Tag.ToString().Split(Convert.ToChar("\\")).Length) //и их уровни вложенности разные
                        )
                    {
                        if (!to_remove.ContainsKey((object)input))
                        {
                            to_remove.Add((object)input, (object)input);//то ранее выбранная идет в топку
                        }
                        if (RemoveFolder != null)
                        {
                            RemoveFolder.Invoke(path);
                        }
                    }
                }

                foreach (object path in to_remove.Keys)
                {
                    list_folders.Remove((object)path);
                }

                if (ClsChildNodes)
                {
                    node.Nodes.Clear();
                }
                //MessageBox.Show(list_folders.Count.ToString() + "/" + to_remove.Count.ToString());
            }
            else
            {
                list_folders.Remove(node.Tag);
                if (RemoveFolder != null)
                {
                    RemoveFolder.Invoke(node.Tag);
                }
            }
        }