コード例 #1
0
            public override void LoadNextLevel(TreeNodeAssemblyView parentNode)
            {
                TreeNodeAssembly tna = parentNode as TreeNodeAssembly;
                SortedList <string, TreeNode> nodes = new SortedList <string, TreeNode>();
                Assembly a = tna.LoadedAssembly;

                Type[] tps = a.GetExportedTypes();
                for (int i = 0; i < tps.Length; i++)
                {
                    bool b = tps[i].IsPublic;
                    if (b)
                    {
                        TreeNodeAssemblyType n;
                        if (tps[i].IsEnum)
                        {
                            n = new TreeNodeEnumType(tps[i]);
                        }
                        else
                        {
                            n = new TreeNodeAssemblyType(tps[i]);
                        }
                        if (nodes.ContainsKey(n.Text))
                        {
                            uint mx = 2;
                            while (true)
                            {
                                string nm = string.Format(CultureInfo.InvariantCulture, "{0}_{1}", n, Text, mx.ToString("x", CultureInfo.InvariantCulture));
                                if (nodes.ContainsKey(nm))
                                {
                                    mx++;
                                }
                                else
                                {
                                    nodes.Add(nm, n);
                                    break;
                                }
                            }
                        }
                        else
                        {
                            nodes.Add(n.Text, n);
                        }
                    }
                }
                IEnumerator <KeyValuePair <string, TreeNode> > ie = nodes.GetEnumerator();

                while (ie.MoveNext())
                {
                    parentNode.Nodes.Add(ie.Current.Value);
                }
            }
コード例 #2
0
        public void LoadGac(params string[] namespaceAndType)
        {
            string _namespace = null;
            string _typename  = null;

            if (namespaceAndType != null)
            {
                if (namespaceAndType.Length > 0)
                {
                    _namespace = namespaceAndType[0];
                    if (namespaceAndType.Length > 1)
                    {
                        _typename = namespaceAndType[1];
                    }
                }
            }
            List <TreeNodeAssembly> traFound = new List <TreeNodeAssembly>();

            lblInfo.Location = new System.Drawing.Point(
                (this.Width - lblInfo.Width) / 2, (this.Height - lblInfo.Height) / 2);
            lblInfo.Visible = true;
            lblInfo.Refresh();
            List <string> ss = new List <string>();

            AssemblyCacheEnum ace = new AssemblyCacheEnum(null);
            string            s;

            s = ace.GetNextAssembly();
            while (!string.IsNullOrEmpty(s))
            {
                ss.Add(s);
                s = ace.GetNextAssembly();
            }
            ss.Sort(new Comparison <string>(compareStringNoCase));
            if (manualDlls != null)
            {
                foreach (KeyValuePair <string, Assembly> s0 in manualDlls)
                {
                    Nodes.Add(new TreeNodeAssembly(s0.Key, s0.Value));
                }
            }
            for (int i = 0; i < ss.Count; i++)
            {
                TreeNodeAssembly tra = new TreeNodeAssembly(ss[i]);
                Nodes.Add(tra);
                if (!string.IsNullOrEmpty(_namespace))
                {
                    if (ss[i].StartsWith(_namespace, StringComparison.Ordinal))
                    {
                        traFound.Add(tra);
                    }
                }
            }
            if (traFound.Count > 0)
            {
                this.SelectedNode = traFound[0];
            }
            if (!string.IsNullOrEmpty(_typename))
            {
                foreach (TreeNodeAssembly tra in traFound)
                {
                    tra.Expand();
                    bool b = false;
                    for (int i = 0; i < tra.Nodes.Count; i++)
                    {
                        TreeNodeAssemblyType n = tra.Nodes[i] as TreeNodeAssemblyType;
                        if (n != null)
                        {
                            if (string.CompareOrdinal(n.ExportedType.FullName, _typename) == 0)
                            {
                                this.SelectedNode = n;
                                b = true;
                                break;
                            }
                        }
                        if (b)
                        {
                            break;
                        }
                    }
                }
            }
            lblInfo.Visible = false;
        }