mytree.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.ComponentModel;
  5. using System.Drawing;
  6. using System.Windows.Forms;
  7. using Microsoft.VisualBasic;
  8. using Microsoft.VisualBasic.CompilerServices;
  9. namespace Dongke.IBOSS.PRD.Framework.Controls
  10. {
  11. [EditorBrowsable(EditorBrowsableState.Never)]
  12. public class mytree : IDisposable
  13. {
  14. private int iNodeLevels;
  15. private int iCellHeight;
  16. private IList<TreeNode> ColLists;
  17. private TreeView _ColHeaderTreeView;
  18. private DataGridView mydgv;
  19. private float[] columnwidth;
  20. private bool disposedValue;
  21. public void SetDVGHeaderText()
  22. {
  23. checked
  24. {
  25. try
  26. {
  27. int num = 0;
  28. int num2 = mydgv.ColumnCount - 1;
  29. for (int i = num; i <= num2; i++)
  30. {
  31. mydgv.Columns[i].HeaderText = Strings.Trim(ColLists[i].Text ?? "");
  32. try
  33. {
  34. mydgv.Columns[i].Name = Strings.Trim(ColLists[i].Text ?? "");
  35. }
  36. catch (Exception projectError)
  37. {
  38. ProjectData.SetProjectError(projectError);
  39. mydgv.Columns[i].Name = "第" + Conversions.ToString(i + 1) + "列";
  40. ProjectData.ClearProjectError();
  41. }
  42. }
  43. }
  44. catch (Exception projectError2)
  45. {
  46. ProjectData.SetProjectError(projectError2);
  47. ProjectData.ClearProjectError();
  48. }
  49. }
  50. }
  51. public mytree(TreeView Tre, DataGridView DGV)
  52. {
  53. ColLists = new List<TreeNode>();
  54. mydgv = DGV;
  55. iNodeLevels = 1;
  56. _ColHeaderTreeView = Tre;
  57. myNodeLevels();
  58. }
  59. public mytree(TreeView Tre, DataGridView DGV, float[] colwidth)
  60. {
  61. ColLists = new List<TreeNode>();
  62. mydgv = DGV;
  63. iNodeLevels = 1;
  64. _ColHeaderTreeView = Tre;
  65. columnwidth = colwidth;
  66. myNodeLevels();
  67. }
  68. public mytree(TreeView Tre, DataGridView DGV, float[] colwidth, int columnheaderheight)
  69. {
  70. ColLists = new List<TreeNode>();
  71. mydgv = DGV;
  72. iNodeLevels = 1;
  73. _ColHeaderTreeView = Tre;
  74. columnwidth = colwidth;
  75. myNodeLevels(columnheaderheight);
  76. }
  77. public int GetColumns()
  78. {
  79. return ColLists.Count;
  80. }
  81. public int GetLeves()
  82. {
  83. return iNodeLevels;
  84. }
  85. public int GetSingleHeight()
  86. {
  87. return iCellHeight;
  88. }
  89. private TreeNode GetLevelNode(TreeNode node, int mylevel)
  90. {
  91. if (node == null)
  92. {
  93. return null;
  94. }
  95. checked
  96. {
  97. if (node.Level + 1 == mylevel)
  98. {
  99. return node;
  100. }
  101. if (node.Level + 1 < mylevel)
  102. {
  103. return null;
  104. }
  105. return GetLevelNode(node.Parent, mylevel);
  106. }
  107. }
  108. public float GetCellHeight(int colindex, int mylevel)
  109. {
  110. TreeNode nodeByColIndex = GetNodeByColIndex(colindex);
  111. TreeNode levelNode = GetLevelNode(nodeByColIndex, mylevel);
  112. if (levelNode == null)
  113. {
  114. return 0f;
  115. }
  116. if (nodeByColIndex.Equals(levelNode))
  117. {
  118. return checked((iNodeLevels - mylevel + 1) * iCellHeight);
  119. }
  120. return iCellHeight;
  121. }
  122. public string GetNodeText(int colindex, int mylevel)
  123. {
  124. TreeNode nodeByColIndex = GetNodeByColIndex(colindex);
  125. TreeNode levelNode = GetLevelNode(nodeByColIndex, mylevel);
  126. if (levelNode == null)
  127. {
  128. return "";
  129. }
  130. return levelNode.Text;
  131. }
  132. public Color GetNodeForeColor(int colindex, int mylevel)
  133. {
  134. TreeNode nodeByColIndex = GetNodeByColIndex(colindex);
  135. return GetLevelNode(nodeByColIndex, mylevel)?.ForeColor ?? Color.Empty;
  136. }
  137. public Color GetNodeBackColor(int colindex, int mylevel)
  138. {
  139. TreeNode nodeByColIndex = GetNodeByColIndex(colindex);
  140. return GetLevelNode(nodeByColIndex, mylevel)?.BackColor ?? Color.Empty;
  141. }
  142. public Font GetNodeFont(int colindex, int mylevel)
  143. {
  144. TreeNode nodeByColIndex = GetNodeByColIndex(colindex);
  145. return GetLevelNode(nodeByColIndex, mylevel)?.NodeFont;
  146. }
  147. public float GetCellWidth(int colindex, int mylevel)
  148. {
  149. TreeNode nodeByColIndex = GetNodeByColIndex(colindex);
  150. TreeNode levelNode = GetLevelNode(nodeByColIndex, mylevel);
  151. if (levelNode == null)
  152. {
  153. return 0f;
  154. }
  155. if (levelNode.Nodes.Count <= 0)
  156. {
  157. return GetUnitHeaderWidth(levelNode);
  158. }
  159. TreeNode firstNode = GetFirstNode(levelNode.FirstNode);
  160. if (firstNode.Equals(nodeByColIndex))
  161. {
  162. return GetUnitHeaderWidth(levelNode);
  163. }
  164. return 0f;
  165. }
  166. public float GetCellWidth2(int colindex, int mylevel)
  167. {
  168. TreeNode nodeByColIndex = GetNodeByColIndex(colindex);
  169. TreeNode levelNode = GetLevelNode(nodeByColIndex, mylevel);
  170. if (levelNode == null)
  171. {
  172. return columnwidth[colindex];
  173. }
  174. if (levelNode.Nodes.Count <= 0)
  175. {
  176. return GetUnitHeaderWidth(levelNode);
  177. }
  178. return GetUnitHeaderWidth(levelNode);
  179. }
  180. private TreeNode GetFirstNode(TreeNode tt)
  181. {
  182. if (tt == null)
  183. {
  184. return null;
  185. }
  186. if (tt.Parent == null)
  187. {
  188. return tt;
  189. }
  190. TreeNode prevNode = tt.PrevNode;
  191. TreeNode treeNode = null;
  192. if (prevNode == null)
  193. {
  194. treeNode = tt;
  195. }
  196. else
  197. {
  198. while (prevNode != null)
  199. {
  200. treeNode = prevNode;
  201. prevNode = prevNode.PrevNode;
  202. }
  203. }
  204. if (treeNode == null)
  205. {
  206. return null;
  207. }
  208. int num = 100000;
  209. if (treeNode.Nodes.Count > 0)
  210. {
  211. TreeNode result = null;
  212. while (treeNode != null)
  213. {
  214. TreeNode treeNode2 = ((treeNode.Nodes.Count <= 0) ? treeNode : GetFirstNode(treeNode.FirstNode));
  215. int columnListNodeIndex = GetColumnListNodeIndex(treeNode2);
  216. if (columnListNodeIndex >= 0 && mydgv.Columns[columnListNodeIndex].Visible && mydgv.Columns[columnListNodeIndex].DisplayIndex < num)
  217. {
  218. num = mydgv.Columns[columnListNodeIndex].DisplayIndex;
  219. result = treeNode2;
  220. }
  221. treeNode = treeNode.NextNode;
  222. }
  223. return result;
  224. }
  225. tt = treeNode;
  226. num = 100000;
  227. TreeNode result2 = null;
  228. try
  229. {
  230. while (tt != null)
  231. {
  232. TreeNode treeNode3 = tt;
  233. int columnListNodeIndex2 = GetColumnListNodeIndex(tt);
  234. if (columnListNodeIndex2 < 0)
  235. {
  236. TreeNode firstNode = GetFirstNode(tt.FirstNode);
  237. columnListNodeIndex2 = GetColumnListNodeIndex(firstNode);
  238. treeNode3 = firstNode;
  239. }
  240. if (columnListNodeIndex2 >= 0 && mydgv.Columns[columnListNodeIndex2].Visible && mydgv.Columns[columnListNodeIndex2].DisplayIndex < num)
  241. {
  242. num = mydgv.Columns[columnListNodeIndex2].DisplayIndex;
  243. result2 = treeNode3;
  244. }
  245. tt = tt.NextNode;
  246. }
  247. }
  248. catch (Exception projectError)
  249. {
  250. ProjectData.SetProjectError(projectError);
  251. TreeNode result3 = null;
  252. ProjectData.ClearProjectError();
  253. return result3;
  254. }
  255. return result2;
  256. }
  257. private TreeNode GetNodeByColIndex(int colindex)
  258. {
  259. return ColLists[colindex];
  260. }
  261. private int myGetNodeLevels(TreeNodeCollection tnc)
  262. {
  263. if (tnc == null)
  264. {
  265. return 0;
  266. }
  267. checked
  268. {
  269. try
  270. {
  271. IEnumerator enumerator = tnc.GetEnumerator();
  272. while (enumerator.MoveNext())
  273. {
  274. TreeNode treeNode = (TreeNode)enumerator.Current;
  275. if (treeNode.Level + 1 > iNodeLevels)
  276. {
  277. iNodeLevels = treeNode.Level + 1;
  278. }
  279. if (treeNode.Nodes.Count > 0)
  280. {
  281. myGetNodeLevels(treeNode.Nodes);
  282. }
  283. else
  284. {
  285. ColLists.Add(treeNode);
  286. }
  287. }
  288. }
  289. finally
  290. {
  291. IEnumerator enumerator2 = null;
  292. if (enumerator2 is IDisposable)
  293. {
  294. (enumerator2 as IDisposable).Dispose();
  295. }
  296. }
  297. return iNodeLevels;
  298. }
  299. }
  300. private void myNodeLevels()
  301. {
  302. iNodeLevels = 1;
  303. ColLists.Clear();
  304. if (_ColHeaderTreeView == null)
  305. {
  306. iCellHeight = mydgv.ColumnHeadersHeight;
  307. return;
  308. }
  309. int num = myGetNodeLevels(_ColHeaderTreeView.Nodes);
  310. if (num != 0)
  311. {
  312. iCellHeight = checked((int)Math.Round((double)mydgv.ColumnHeadersHeight / (double)num));
  313. }
  314. else
  315. {
  316. iCellHeight = mydgv.ColumnHeadersHeight;
  317. }
  318. }
  319. private void myNodeLevels(int Columnheaderheight)
  320. {
  321. iNodeLevels = 1;
  322. ColLists.Clear();
  323. if (_ColHeaderTreeView == null)
  324. {
  325. iCellHeight = Columnheaderheight;
  326. return;
  327. }
  328. int num = myGetNodeLevels(_ColHeaderTreeView.Nodes);
  329. if (num != 0)
  330. {
  331. iCellHeight = checked((int)Math.Round((double)Columnheaderheight / (double)num));
  332. }
  333. else
  334. {
  335. iCellHeight = Columnheaderheight;
  336. }
  337. }
  338. private float GetUnitHeaderWidth(TreeNode node)
  339. {
  340. float num = 0f;
  341. int columnListNodeIndex = GetColumnListNodeIndex(node);
  342. if (node.Nodes == null)
  343. {
  344. if (mydgv.Columns[columnListNodeIndex].Visible)
  345. {
  346. return columnwidth[columnListNodeIndex];
  347. }
  348. return 0f;
  349. }
  350. if (node.Nodes.Count == 0)
  351. {
  352. if (mydgv.Columns[columnListNodeIndex].Visible)
  353. {
  354. return columnwidth[columnListNodeIndex];
  355. }
  356. return 0f;
  357. }
  358. int num2 = 0;
  359. checked
  360. {
  361. int num3 = node.Nodes.Count - 1;
  362. for (int i = num2; i <= num3; i++)
  363. {
  364. num += GetUnitHeaderWidth(node.Nodes[i]);
  365. }
  366. return num;
  367. }
  368. }
  369. private int GetColumnListNodeIndex(TreeNode node)
  370. {
  371. if (node == null)
  372. {
  373. return -1;
  374. }
  375. int num = 0;
  376. checked
  377. {
  378. int num2 = ColLists.Count - 1;
  379. for (int i = num; i <= num2; i++)
  380. {
  381. if (ColLists[i].Equals(node))
  382. {
  383. return i;
  384. }
  385. }
  386. return -1;
  387. }
  388. }
  389. private int GetUnitHeaderWidthCols(TreeNode node)
  390. {
  391. int num = 0;
  392. int columnListNodeIndex = GetColumnListNodeIndex(node);
  393. if (node.Nodes == null)
  394. {
  395. if (mydgv.Columns[columnListNodeIndex].Visible)
  396. {
  397. return 1;
  398. }
  399. return 0;
  400. }
  401. if (node.Nodes.Count == 0)
  402. {
  403. if (mydgv.Columns[columnListNodeIndex].Visible)
  404. {
  405. return 1;
  406. }
  407. return 0;
  408. }
  409. int num2 = 0;
  410. checked
  411. {
  412. int num3 = node.Nodes.Count - 1;
  413. for (int i = num2; i <= num3; i++)
  414. {
  415. num += GetUnitHeaderWidthCols(node.Nodes[i]);
  416. }
  417. return num;
  418. }
  419. }
  420. public int GetCellWidthCols(int colindex, int mylevel)
  421. {
  422. TreeNode nodeByColIndex = GetNodeByColIndex(colindex);
  423. TreeNode levelNode = GetLevelNode(nodeByColIndex, mylevel);
  424. if (levelNode == null)
  425. {
  426. return 0;
  427. }
  428. if (levelNode.Nodes.Count <= 0)
  429. {
  430. return GetUnitHeaderWidthCols(levelNode);
  431. }
  432. TreeNode firstNode = GetFirstNode(levelNode.FirstNode);
  433. if (firstNode.Equals(nodeByColIndex))
  434. {
  435. return GetUnitHeaderWidthCols(levelNode);
  436. }
  437. return 0;
  438. }
  439. public int GetCellHeightLevels(int colindex, int mylevel, bool isTopNodeFill, out bool flag)
  440. {
  441. flag = true;
  442. TreeNode nodeByColIndex = GetNodeByColIndex(colindex);
  443. TreeNode levelNode = GetLevelNode(nodeByColIndex, mylevel);
  444. int num;
  445. if (levelNode == null)
  446. {
  447. num = 0;
  448. }
  449. else if (nodeByColIndex.Equals(levelNode))
  450. {
  451. num = checked(iNodeLevels - mylevel + 1);
  452. if (isTopNodeFill && nodeByColIndex.Level < iNodeLevels - 1 && levelNode.FullPath.IndexOf("\\") >= 0)
  453. {
  454. num--;
  455. flag = false;
  456. }
  457. }
  458. else
  459. {
  460. num = 1;
  461. if (isTopNodeFill && levelNode != nodeByColIndex && nodeByColIndex.Level < iNodeLevels - 1)
  462. {
  463. num = 1 + iNodeLevels - 1 - nodeByColIndex.Level;
  464. }
  465. }
  466. return num;
  467. }
  468. protected virtual void Dispose(bool disposing)
  469. {
  470. if (!disposedValue && disposing)
  471. {
  472. try
  473. {
  474. mydgv = null;
  475. columnwidth = null;
  476. _ColHeaderTreeView = null;
  477. ColLists.Clear();
  478. ColLists = null;
  479. }
  480. catch (Exception projectError)
  481. {
  482. ProjectData.SetProjectError(projectError);
  483. ProjectData.ClearProjectError();
  484. }
  485. }
  486. disposedValue = true;
  487. }
  488. public void Dispose()
  489. {
  490. Dispose(disposing: true);
  491. GC.SuppressFinalize(this);
  492. }
  493. }
  494. }