private void treeView_AfterSelect(object sender, TreeViewEventArgs e) { TypePicker.TypeNode node = e.Node as TypePicker.TypeNode; _resultType = node != null && node.IsSelectable? node.Type: null; okButton.Enabled = _resultType != null; }
private void LoadTypes() { Cursor = Cursors.WaitCursor; try { _treeView.Nodes.Clear(); var assemblyNodes = new Dictionary <Assembly, TreeNode>(); var namespaceNodes = new Dictionary <string, TreeNode>(); var typeNodes = new Dictionary <Type, TypePicker.TypeNode>(); var service = (ITypeDiscoveryService)_serviceProvider.GetService(typeof(ITypeDiscoveryService)); var cTypes = service.GetTypes(_baseType, _systemCheckBox.Checked); var types = new List <Type>(cTypes.Count); foreach (Type type in cTypes) { types.Add(type); } types.Sort((a, b) => a.Assembly == b.Assembly ? string.Compare(a.FullName, b.FullName) : string.Compare(a.Assembly.FullName, b.Assembly.FullName)); foreach (var type in types) { if (_filter != null && _filter(type) == false) { continue; } var assembly = type.Assembly; TreeNode assemblyNode; if (!assemblyNodes.TryGetValue(assembly, out assemblyNode)) { assemblyNodes[assembly] = assemblyNode = _treeView.Nodes.Add(assembly.FullName, assembly.GetName().Name, 1, 1); } var @namespace = type.Namespace ?? string.Empty; var namespaceKey = assembly.FullName + ", " + @namespace; TreeNode namespaceNode; if (!namespaceNodes.TryGetValue(namespaceKey, out namespaceNode)) { namespaceNodes[namespaceKey] = namespaceNode = assemblyNode.Nodes.Add(namespaceKey, @namespace, 2, 2); } GetTypeNode getTypeNode = null; getTypeNode = t => { TypePicker.TypeNode node; if (typeNodes.TryGetValue(t, out node)) { return(node); } if (t.DeclaringType == null) { namespaceNode.Nodes.Add(node = new TypePicker.TypeNode(t.Name, t, false)); } else { TreeNode parent = getTypeNode(t.DeclaringType); parent.Nodes.Add(node = new TypePicker.TypeNode(t.Name, t, false)); } typeNodes.Add(t, node); return(node); }; getTypeNode(type).IsSelectable = true; } } catch (Exception ex) { Debug.WriteLine(ex.Message); } finally { Cursor = Cursors.Default; } }
private void LoadTypes() { Cursor = Cursors.WaitCursor; try { treeView.Nodes.Clear(); Hashtable assemblyNodes = new Hashtable(); Hashtable namespaceNodes = new Hashtable(); Hashtable typeNodes = new Hashtable(); ITypeDiscoveryService service = (ITypeDiscoveryService)_serviceProvider.GetService(typeof(ITypeDiscoveryService)); ICollection cTypes = service.GetTypes(_baseType, systemCheckBox.Checked); List <Type> types = new List <Type>(cTypes.Count); foreach (Type type in cTypes) { types.Add(type); } types.Sort(delegate(Type a, Type b) { return(a.Assembly == b.Assembly? a.FullName.CompareTo(b.FullName): a.Assembly.FullName.CompareTo(b.Assembly.FullName)); }); foreach (Type type in types) { if (_filter != null && _filter(type) == false) { continue; } Assembly assembly = type.Assembly; TreeNode assemblyNode = (TreeNode)assemblyNodes[assembly]; if (assemblyNode == null) { assemblyNodes[assembly] = assemblyNode = treeView.Nodes.Add(assembly.FullName, assembly.GetName().Name, 1, 1); } string @namespace = type.Namespace ?? string.Empty; string namespaceKey = assembly.FullName + ", " + @namespace; TreeNode namespaceNode = (TreeNode)namespaceNodes[namespaceKey]; if (namespaceNode == null) { namespaceNodes[namespaceKey] = namespaceNode = assemblyNode.Nodes.Add(namespaceKey, @namespace, 2, 2); } GetTypeNode getTypeNode = null; getTypeNode = delegate(Type t) { TypePicker.TypeNode node = (TypePicker.TypeNode)typeNodes[t]; if (node != null) { return(node); } if (t.DeclaringType == null) { namespaceNode.Nodes.Add(node = new TypePicker.TypeNode(t.Name, t, false)); } else { TreeNode parent = getTypeNode(t.DeclaringType); parent.Nodes.Add(node = new TypePicker.TypeNode(t.Name, t, false)); } typeNodes[t] = node; return(node); }; getTypeNode(type).IsSelectable = true; } } catch (Exception ex) { Debug.WriteLine(ex.Message); } finally { Cursor = Cursors.Default; } }