G2DListSelectEditor.cs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Text;
  7. using System.Windows.Forms;
  8. namespace CommonFroms.G2D
  9. {
  10. public partial class G2DListSelectEditor<T> : Form
  11. // where T : class
  12. {
  13. private static Rectangle last_open_rect = Rectangle.Empty;
  14. public T SelectedObject
  15. {
  16. get;
  17. private set;
  18. }
  19. public G2DListSelectEditor(List<T> list, T selected = default(T))
  20. : this(list.ToArray(), selected) { }
  21. public G2DListSelectEditor(T[] list, T selected = default(T))
  22. {
  23. InitializeComponent();
  24. this.listView1.Visible = true;
  25. this.treeView1.Visible = false;
  26. foreach (T e in list)
  27. {
  28. ListViewItem item = new ListViewItem(e.ToString());
  29. item.Tag = e;
  30. listView1.Items.Add(item);
  31. }
  32. if (selected != null)
  33. {
  34. listView1.SelectedItems.Clear();
  35. foreach (ListViewItem item in listView1.Items)
  36. {
  37. if (object.Equals(item.Tag, selected))
  38. {
  39. item.Selected = true;
  40. return;
  41. }
  42. }
  43. }
  44. }
  45. public G2DListSelectEditor(TreeNode root, ImageList imageList, object selected)
  46. {
  47. InitializeComponent();
  48. this.listView1.Visible = false;
  49. this.treeView1.Visible = true;
  50. this.treeView1.ImageList = imageList;
  51. TreeNode tr = TreeNodeDuplicate(root);
  52. this.treeView1.Nodes.Add(tr);
  53. this.treeView1.CollapseAll();
  54. tr.Expand();
  55. if (selected != null)
  56. {
  57. foreach (TreeNode tn in G2DTreeNodeBase.GetAllNodes(treeView1.Nodes))
  58. {
  59. if (tn.Tag == selected)
  60. {
  61. treeView1.SelectedNode = tn;
  62. tn.Parent.Expand();
  63. return;
  64. }
  65. }
  66. }
  67. }
  68. public static TreeNode TreeNodeDuplicate(TreeNode root)
  69. {
  70. TreeNode node = new TreeNode(root.Text);
  71. node.Tag = root.Tag;
  72. node.ImageIndex = root.ImageIndex;
  73. node.SelectedImageIndex = root.SelectedImageIndex;
  74. if (!string.IsNullOrEmpty(root.ImageKey))
  75. node.ImageKey = root.ImageKey;
  76. if (!string.IsNullOrEmpty(root.SelectedImageKey))
  77. node.SelectedImageKey = root.SelectedImageKey;
  78. foreach (TreeNode tn in root.Nodes)
  79. {
  80. TreeNode ctn = TreeNodeDuplicate(tn);
  81. node.Nodes.Add(ctn);
  82. }
  83. if (root.IsExpanded)
  84. {
  85. node.Expand();
  86. }
  87. else
  88. {
  89. node.Collapse();
  90. }
  91. return node;
  92. }
  93. private void G2DListSelectEditor_Load(object sender, EventArgs e)
  94. {
  95. if (last_open_rect != Rectangle.Empty)
  96. {
  97. this.Bounds = last_open_rect;
  98. }
  99. if (treeView1.Visible && treeView1.Nodes.Count > 0)
  100. {
  101. treeView1.Nodes[0].Expand();
  102. }
  103. }
  104. private void G2DListSelectEditor_FormClosing(object sender, FormClosingEventArgs e)
  105. {
  106. if (listView1.Visible)
  107. {
  108. if (listView1.SelectedItems.Count > 0)
  109. {
  110. SelectedObject = (T)listView1.SelectedItems[0].Tag;
  111. }
  112. }
  113. else if (treeView1.Visible)
  114. {
  115. if (treeView1.SelectedNode != null)
  116. {
  117. SelectedObject = (T)treeView1.SelectedNode.Tag;
  118. }
  119. }
  120. last_open_rect = this.Bounds;
  121. }
  122. }
  123. }