private void AddItem(IListItemEx item) {
TreeNode itemNode = null;
foreach (TreeNode node in this.ShellTreeView.Nodes) {
try {
itemNode = this.FromItem(item.Parent, node);
} catch (Exception) {
continue;
}
if (itemNode != null) break;
}
if (itemNode != null) {
var node = new TreeNode(item.DisplayName);
IListItemEx itemReal = FileSystemListItem.ToFileSystemItem(IntPtr.Zero, item.ParsingName.ToShellParsingName());
node.Tag = itemReal;
var oldnodearray = itemNode.Nodes.OfType<TreeNode>().ToList();
if (!oldnodearray.Any(s => s.Tag != null && (s.Tag as IListItemEx).Equals(itemReal))) oldnodearray.Add(node);
//var newArray = oldnodearray.OrderBy(o => o.Text).ToArray();
this.ShellTreeView.BeginUpdate();
itemNode.Nodes.Clear();
itemNode.Nodes.AddRange(oldnodearray.OrderBy(o => o.Text).ToArray());
this.ShellTreeView.EndUpdate();
//if (itemNode != null && itemNode.Nodes.Count > 0) {
if (itemNode?.Nodes?.Count > 0) {
var newNode = itemNode.Nodes.OfType<TreeNode>().FirstOrDefault(s => (s?.Tag as IListItemEx).Equals(itemReal));
if (newNode != null) {
SetNodeImage(newNode.Handle, itemReal.PIDL, this.ShellTreeView.Handle, !(newNode.Parent != null && (newNode.Parent.Tag as IListItemEx).ParsingName == KnownFolders.Links.ParsingName));
}
}
}
}