private void BrowseAndExpandMember() { object member = _searchPath.FirstOrDefault(); if (member == null) { CurrentTreeView.Focus(); _currentSearchNode.EnsureVisible(); CurrentTreeView.SelectedNode = _currentSearchNode; MainForm.HandleExpand = true; return; } if (member is TypeDef) { _currentSearchNode = _currentSearchNode.Nodes.Cast <TreeNode>().First(n => n.Text == NewType(member as TypeDef).Text); _currentSearchNode.Expand(); } else if (member is MethodDef) { var method = (MethodDef)member; TreeNode newNode = _currentSearchNode.Nodes.Cast <TreeNode>().FirstOrDefault(n => n.Text == NewMethod(method).Text); if (newNode != null) { _currentSearchNode = newNode; } else { foreach (TreeNode node in _currentSearchNode.Nodes.Cast <TreeNode>().Where(n => n.Tag is PropertyDef || n.Tag is EventDef)) { newNode = node.Nodes.Cast <TreeNode>().FirstOrDefault(n => n.Text == NewMethod(method).Text); if (newNode != null) { _currentSearchNode = newNode; break; } } if (newNode == null) { _searchPath.Clear(); BrowseAndExpandMember(); } } treeView_NodeMouseClick(this, new TreeNodeMouseClickEventArgs(_currentSearchNode, MouseButtons.Left, 1, _currentSearchNode.Bounds.X, _currentSearchNode.Bounds.Y)); DataGridViewHandler.SelectTab(); } else if (member is FieldDef) { _currentSearchNode = _currentSearchNode.Nodes.Cast <TreeNode>().First(n => n.Text == NewField(member as FieldDef).Text); treeView_NodeMouseClick(this, new TreeNodeMouseClickEventArgs(_currentSearchNode, MouseButtons.Left, 1, _currentSearchNode.Bounds.X, _currentSearchNode.Bounds.Y)); DataGridViewHandler.SelectTab(); } else if (member is PropertyDef) { _currentSearchNode = _currentSearchNode.Nodes.Cast <TreeNode>().First(n => n.Text == NewProperty(member as PropertyDef).Text); _currentSearchNode.Expand(); } else if (member is EventDef) { _currentSearchNode = _currentSearchNode.Nodes.Cast <TreeNode>().First(n => n.Text == NewEvent(member as EventDef).Text); _currentSearchNode.Expand(); } _searchPath.RemoveAt(0); if (_currentSearchNode.HasVirtualNode()) { var processor = new NodeDevirtualizer(_currentSearchNode, this); processor.WorkerFinished += searchProcessor_WorkerFinished; processor.ProcessNode(); VirtualNodeHandler.VirtualNodes--; _currentSearchNode.Nodes.Remove(_currentSearchNode.FindVirtualNode()); } else { BrowseAndExpandMember(); } }