using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace CommonFroms.G2D { public partial class G2DListSelectEditor<T> : Form // where T : class { private static Rectangle last_open_rect = Rectangle.Empty; public T SelectedObject { get; private set; } public G2DListSelectEditor(List<T> list, T selected = default(T)) : this(list.ToArray(), selected) { } public G2DListSelectEditor(T[] list, T selected = default(T)) { InitializeComponent(); this.listView1.Visible = true; this.treeView1.Visible = false; foreach (T e in list) { ListViewItem item = new ListViewItem(e.ToString()); item.Tag = e; listView1.Items.Add(item); } if (selected != null) { listView1.SelectedItems.Clear(); foreach (ListViewItem item in listView1.Items) { if (object.Equals(item.Tag, selected)) { item.Selected = true; return; } } } } public G2DListSelectEditor(TreeNode root, ImageList imageList, object selected) { InitializeComponent(); this.listView1.Visible = false; this.treeView1.Visible = true; this.treeView1.ImageList = imageList; TreeNode tr = TreeNodeDuplicate(root); this.treeView1.Nodes.Add(tr); this.treeView1.CollapseAll(); tr.Expand(); if (selected != null) { foreach (TreeNode tn in G2DTreeNodeBase.GetAllNodes(treeView1.Nodes)) { if (tn.Tag == selected) { treeView1.SelectedNode = tn; tn.Parent.Expand(); return; } } } } public static TreeNode TreeNodeDuplicate(TreeNode root) { TreeNode node = new TreeNode(root.Text); node.Tag = root.Tag; node.ImageIndex = root.ImageIndex; node.SelectedImageIndex = root.SelectedImageIndex; if (!string.IsNullOrEmpty(root.ImageKey)) node.ImageKey = root.ImageKey; if (!string.IsNullOrEmpty(root.SelectedImageKey)) node.SelectedImageKey = root.SelectedImageKey; foreach (TreeNode tn in root.Nodes) { TreeNode ctn = TreeNodeDuplicate(tn); node.Nodes.Add(ctn); } if (root.IsExpanded) { node.Expand(); } else { node.Collapse(); } return node; } private void G2DListSelectEditor_Load(object sender, EventArgs e) { if (last_open_rect != Rectangle.Empty) { this.Bounds = last_open_rect; } if (treeView1.Visible && treeView1.Nodes.Count > 0) { treeView1.Nodes[0].Expand(); } } private void G2DListSelectEditor_FormClosing(object sender, FormClosingEventArgs e) { if (listView1.Visible) { if (listView1.SelectedItems.Count > 0) { SelectedObject = (T)listView1.SelectedItems[0].Tag; } } else if (treeView1.Visible) { if (treeView1.SelectedNode != null) { SelectedObject = (T)treeView1.SelectedNode.Tag; } } last_open_rect = this.Bounds; } } }