ComboBoxTreeViewEx.cs 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Drawing;
  5. using System.Data;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using System.Runtime.InteropServices;
  10. using System.Collections;
  11. namespace LYFZ.ComponentLibrary
  12. {
  13. public partial class ComboBoxTreeViewEx : ComboBox
  14. {
  15. #region 只读
  16. [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
  17. public static extern IntPtr GetWindow(IntPtr hWnd, int uCmd);
  18. int GW_CHILD = 5;
  19. [DllImport("user32.dll", CharSet = CharSet.Auto)]
  20. //wParam=1为只读;wParam=0为可写
  21. public static extern IntPtr SendMessage(IntPtr hWnd, int msg, int wParam, int lParam);
  22. public const int EM_SETREADONLY = 0xcf;
  23. private bool _readonly = false;
  24. /// <summary>
  25. /// 只读
  26. /// </summary>
  27. public bool ReadOnly
  28. {
  29. get { return _readonly; }
  30. set
  31. {
  32. _readonly = value;
  33. if (_readonly)
  34. {
  35. IntPtr editHandle = GetWindow(this.Handle, GW_CHILD);
  36. SendMessage(editHandle, EM_SETREADONLY, 1, 0);
  37. }
  38. else
  39. {
  40. IntPtr editHandle = GetWindow(this.Handle, GW_CHILD);
  41. SendMessage(editHandle, EM_SETREADONLY, 0, 0);
  42. }
  43. }
  44. }
  45. #endregion
  46. private const int WM_LBUTTONDOWN = 0x201, WM_LBUTTONDBLCLK = 0x203;
  47. ToolStripControlHost treeViewHost;
  48. ToolStripDropDown dropDown;
  49. public ComboBoxTreeViewEx()
  50. {
  51. TreeView treeView = new TreeView();
  52. treeView.AfterSelect += new TreeViewEventHandler(treeView_AfterSelect);
  53. treeView.BeforeExpand += new TreeViewCancelEventHandler(treeView_BeforeExpand);
  54. treeView.BorderStyle = BorderStyle.None;
  55. treeViewHost = new ToolStripControlHost(treeView);
  56. dropDown = new ToolStripDropDown();
  57. dropDown.Width = this.Width;
  58. dropDown.Items.Add(treeViewHost);
  59. this.DropDownHeight = 220;
  60. treeView.NodeMouseClick += treeView_NodeMouseClick;
  61. }
  62. bool isNodeMouseClick = false;
  63. /// <summary>
  64. /// 是否开启节点单击事件
  65. /// </summary>
  66. [Category("控件扩展事件"), Description("是否开启节点单击事件")]
  67. public bool IsNodeMouseClick
  68. {
  69. get { return isNodeMouseClick; }
  70. set { isNodeMouseClick = value; }
  71. }
  72. //定义delegate
  73. public delegate void ComboBoxTreeView_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e);
  74. //用event 关键字声明事件对象
  75. /// <summary>
  76. ///
  77. /// </summary>
  78. [Category("控件扩展事件"), Description("文本框值修改时")]
  79. public event ComboBoxTreeView_NodeMouseClick ComboBoxTree_NodeMouseClick;
  80. void treeView_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
  81. {
  82. if (!IsNodeMouseClick) { return; }
  83. if (!this.AfterSelectLevelFirstNode)
  84. {
  85. if (e.Node.Level == 0)
  86. { return; }
  87. }
  88. if (e.Node.Nodes.Count <= 0 || (this.isSelectParentNode && e.X > (e.Node.Level + 1) * 20))//判断选中节点是否有子节点
  89. {
  90. this.Text = "";
  91. this.StrGetName = e.Node.Name.ToString();
  92. this.Tag = e.Node.Tag;
  93. this.Text = e.Node.Text.ToString();
  94. dropDown.Close();
  95. if (this.ComboBoxTree_NodeMouseClick != null)
  96. { ComboBoxTree_NodeMouseClick(sender, e); }
  97. }
  98. }
  99. [Browsable(true), Description("获取TreeView的节点集合"), Category("TreeView"), DesignerSerializationVisibility(DesignerSerializationVisibility.Content), Editor(typeof(TreeNodeCollection), typeof(TreeNodeCollection))]
  100. public TreeNodeCollection Nodes
  101. {
  102. get
  103. { return this.TreeView.Nodes; }
  104. }
  105. [Browsable(true), Description("获取或设置TreeView的选定节点"), Category("TreeView")]
  106. public TreeNode SelectedNode
  107. {
  108. set
  109. { this.TreeView.SelectedNode = value; }
  110. get
  111. { return this.TreeView.SelectedNode; }
  112. }
  113. private object _strkey;
  114. /// <summary>
  115. ///
  116. /// </summary>
  117. public object StrKey
  118. {
  119. set { _strkey = value; }
  120. get { return _strkey; }
  121. }
  122. bool isSelectParentNode = false;
  123. /// <summary>
  124. /// 是否允许选择父节点
  125. /// </summary>
  126. [Category("控件扩展事件"), Description("是否允许选择父节点")]
  127. public bool IsSelectParentNode
  128. {
  129. get { return isSelectParentNode; }
  130. set { isSelectParentNode = value; }
  131. }
  132. public TreeView TreeView
  133. {
  134. get { return treeViewHost.Control as TreeView; }
  135. }
  136. private void ShowDropDown()
  137. {
  138. if (dropDown != null)
  139. {
  140. treeViewHost.Size = new Size(DropDownWidth - 2, DropDownHeight);
  141. dropDown.Show(this, 0, this.Height);
  142. }
  143. }
  144. protected override void WndProc(ref Message m)
  145. {
  146. if (m.Msg == WM_LBUTTONDBLCLK || m.Msg == WM_LBUTTONDOWN)
  147. {
  148. ShowDropDown();
  149. return;
  150. }
  151. base.WndProc(ref m);
  152. }
  153. protected override void Dispose(bool disposing)
  154. {
  155. if (disposing)
  156. {
  157. if (dropDown != null)
  158. {
  159. dropDown.Dispose();
  160. dropDown = null;
  161. }
  162. }
  163. base.Dispose(disposing);
  164. }
  165. #region 定义文本框值更改后触发事件
  166. //定义delegate
  167. public delegate void ComboBoxTreeView_TextChanged(object sender, TreeViewEventArgs e);
  168. //用event 关键字声明事件对象
  169. /// <summary>
  170. ///
  171. /// </summary>
  172. [Category("控件扩展事件"), Description("文本框值修改时")]
  173. public event ComboBoxTreeView_TextChanged ComboBoxTreeViewEx_TextChanged;
  174. private bool _dropdownshow = false;
  175. /// <summary>
  176. /// 控件下拉是展开还是隐藏
  177. /// </summary>
  178. public bool DropDownShow
  179. {
  180. get { return _dropdownshow; }
  181. set { _dropdownshow = value; }
  182. }
  183. private bool _afterselectlevelfirstnode;
  184. /// <summary>
  185. /// 是否可选择第一个节点,true:可以选择,false:不能选择
  186. /// </summary>
  187. [Category("控件扩展事件"), Description("是否可选择第一个节点,true:可以选择,false:不能选择")]
  188. public bool AfterSelectLevelFirstNode
  189. {
  190. get { return _afterselectlevelfirstnode; }
  191. set { _afterselectlevelfirstnode = value; }
  192. }
  193. /// <summary>
  194. /// 是否设置为空,未选择
  195. /// </summary>
  196. bool isSetValueNull = false;
  197. /// <summary>
  198. /// 清空当前控件所选择的值
  199. /// </summary>
  200. public void SetTextAndTag_ValueNull()
  201. {
  202. this.Text = "";
  203. this.Tag = null;
  204. this.StrGetName = "";
  205. this.isSetValueNull = true;
  206. this.NodeClearBackColor();
  207. }
  208. private string _StrGetName = "";
  209. /// <summary>
  210. /// 获取Tag同等的Name
  211. /// </summary>
  212. public string StrGetName
  213. {
  214. get { return _StrGetName; }
  215. set { _StrGetName = value; }
  216. }
  217. private string _StrGetTagName = "";
  218. /// <summary>
  219. /// 获取控件TagName同等的其他控件的Tag
  220. /// </summary>
  221. public string StrGetTagName
  222. {
  223. get { return _StrGetTagName; }
  224. set { _StrGetTagName = value; }
  225. }
  226. /// <summary>
  227. /// 节点选择事件
  228. /// </summary>
  229. /// <param name="sender"></param>
  230. /// <param name="e"></param>
  231. private void treeView_AfterSelect(object sender, TreeViewEventArgs e)
  232. {
  233. if (this.isSetValueNull) { this.isSetValueNull = false; TreeView.SelectedNode.ForeColor = Color.Red; return; }
  234. if (e.Node.Nodes.Count <= 0 || this.isSelectParentNode)//判断选中节点是否有子节点
  235. {
  236. NodeClearBackColor();
  237. if (AfterSelectLevelFirstNode)
  238. {
  239. this.StrGetName = TreeView.SelectedNode.Name.ToString();
  240. this.Tag = TreeView.SelectedNode.Tag;
  241. this.Text = TreeView.SelectedNode.Text.ToString();
  242. TreeView.SelectedNode.ForeColor = Color.Red;
  243. dropDown.Close();
  244. }
  245. else
  246. {
  247. if (DropDownShow && e.Node.Level == 0)
  248. {
  249. if (e.Node.Level == 0 && e.Node.Text == "")
  250. {
  251. this.Tag = null;
  252. this.Text = "";
  253. dropDown.Close();
  254. }
  255. else
  256. {
  257. this.StrGetName = "";
  258. this.Text = "";
  259. dropDown.Close();
  260. }
  261. }
  262. else
  263. {
  264. if (TreeView.SelectedNode.Name.ToString().Trim() != "")
  265. {
  266. this.StrGetName = TreeView.SelectedNode.Name.ToString();
  267. this.Tag = TreeView.SelectedNode.Tag;
  268. this.Text = TreeView.SelectedNode.Text.ToString();
  269. TreeView.SelectedNode.ForeColor = Color.Red;
  270. dropDown.Close();
  271. }
  272. else
  273. {
  274. if (TreeView.SelectedNode.Text.ToString().Trim() == "")
  275. {
  276. this.StrGetName = TreeView.SelectedNode.Name.ToString();
  277. this.Tag = TreeView.SelectedNode.Tag;
  278. this.Text = TreeView.SelectedNode.Text.ToString();
  279. TreeView.SelectedNode.ForeColor = Color.Red;
  280. dropDown.Close();
  281. }
  282. else
  283. {
  284. return;
  285. }
  286. }
  287. }
  288. }
  289. }
  290. if (this.ComboBoxTreeViewEx_TextChanged != null)
  291. ComboBoxTreeViewEx_TextChanged(sender, e);
  292. //选择后,关闭所有展开的节点
  293. /* foreach (TreeNode item in ((TreeView)sender).Nodes)
  294. {
  295. if (e.Node != item)
  296. {
  297. item.Collapse();
  298. }
  299. }*/
  300. }
  301. /// <summary>
  302. /// 点击一个节点展开,关闭其他展开的节点
  303. /// </summary>
  304. /// <param name="sender"></param>
  305. /// <param name="e"></param>
  306. private void treeView_BeforeExpand(object sender, TreeViewCancelEventArgs e)
  307. {
  308. foreach (TreeNode item in ((TreeView)sender).Nodes)
  309. {
  310. if (e.Node != item && !item.Nodes.Contains(e.Node))
  311. {
  312. item.Collapse();
  313. }
  314. }
  315. }
  316. #endregion
  317. #region 根据Tag获取当前所指的Text
  318. /// <summary>
  319. /// 遍历树,根据Tag获取当前所指的Text
  320. /// </summary>
  321. /// <param name="sender"></param>
  322. /// <param name="e"></param>
  323. public void TagFindText(object ObjKey)
  324. {
  325. IsTagReturn = false;
  326. NodeClearBackColor();
  327. foreach (TreeNode node in this.TreeView.Nodes)
  328. {
  329. if (node.Tag != null)
  330. {
  331. if (node.Tag.Equals(ObjKey))
  332. {
  333. this.Text = node.Text;
  334. this.Tag = node.Tag;
  335. this.StrGetName = node.Name;
  336. //node.BackColor = System.Drawing.Color.FromArgb(224, 224, 224); //Color.LightPink;
  337. this.TreeView.SelectedNode = node;
  338. node.ForeColor = Color.Red;
  339. IsTagReturn = true;
  340. }
  341. else
  342. { TagForeachTreeNode(node, ObjKey); }
  343. }
  344. else
  345. { TagForeachTreeNode(node, ObjKey); }
  346. if (IsTagReturn)
  347. { return; }
  348. }
  349. }
  350. private bool IsTagReturn = false;
  351. /// <summary>
  352. /// 循环遍历子节点
  353. /// </summary>
  354. private void TagForeachTreeNode(TreeNode node, object Key)
  355. {
  356. foreach (TreeNode nde in node.Nodes)
  357. {
  358. if (nde.Tag.Equals(Key))
  359. {
  360. this.Text = nde.Text;
  361. this.Tag = nde.Tag;
  362. this.StrGetName = nde.Name;
  363. //nde.BackColor = System.Drawing.Color.FromArgb(224, 224, 224); //Color.Silver;
  364. this.TreeView.SelectedNode = nde;
  365. nde.ForeColor = Color.Red;
  366. node.ExpandAll();
  367. IsTagReturn = true;
  368. return;
  369. }
  370. else
  371. {
  372. if (nde.Nodes.Count > 0)
  373. {
  374. TagForeachTreeNode(nde, Key);
  375. }
  376. }
  377. }
  378. }
  379. #endregion
  380. #region 根据Text获取当前所指的Tag
  381. /// <summary>
  382. /// 遍历树,根据Text获取当前所指的Tag
  383. /// </summary>
  384. /// <param name="ObjText"></param>
  385. public void TextFindTag(string ObjText)
  386. {
  387. IsTextReturn = false;
  388. NodeClearBackColor();
  389. foreach (TreeNode node in TreeView.Nodes)
  390. {
  391. if (node.Tag != null)
  392. {
  393. if (node.Text.Equals(ObjText))
  394. {
  395. this.Text = node.Text;
  396. this.Tag = node.Tag;
  397. this.StrGetName = node.Name;
  398. this.TreeView.SelectedNode = node;
  399. node.ForeColor = Color.Red;
  400. IsTextReturn = true;
  401. }
  402. else
  403. { TextForeachTreeNode(node, ObjText); }
  404. }
  405. else
  406. { TextForeachTreeNode(node, ObjText); }
  407. if (IsTextReturn)
  408. { return; }
  409. }
  410. this.Text = ObjText.Trim();
  411. }
  412. private bool IsTextReturn = false;
  413. /// <summary>
  414. /// 循环遍历子节点
  415. /// </summary>
  416. private void TextForeachTreeNode(TreeNode node, string ObjText)
  417. {
  418. foreach (TreeNode nde in node.Nodes)
  419. {
  420. if (nde.Text.Equals(ObjText))
  421. {
  422. this.Text = nde.Text;
  423. this.Tag = nde.Tag;
  424. this.StrGetName = nde.Name;
  425. this.TreeView.SelectedNode = node;
  426. nde.ForeColor = Color.Red;
  427. node.Expand();
  428. if (node.Level > 0)
  429. { node.Parent.Expand(); }
  430. IsTextReturn = true;
  431. return;
  432. }
  433. else
  434. {
  435. if (nde.Nodes.Count > 0)
  436. { TextForeachTreeNode(nde, ObjText); }
  437. }
  438. }
  439. }
  440. /// <summary>
  441. /// 遍历树,根据Text获取当前所指的Tag
  442. /// </summary>
  443. /// <param name="ObjText"></param>
  444. public string TextFindParentText(string ObjText)
  445. {
  446. bool Isbl = false;
  447. string StrText = "";
  448. foreach (TreeNode node in TreeView.Nodes)
  449. {
  450. if (node.Tag != null)
  451. {
  452. if (node.Text.Equals(ObjText))
  453. {
  454. StrText = node.Text; Isbl = true;
  455. }
  456. else
  457. { StrText = TextForeachTreeNodeParentText(node, ObjText, ref Isbl); }
  458. }
  459. else
  460. { StrText = TextForeachTreeNodeParentText(node, ObjText, ref Isbl); }
  461. if (Isbl)
  462. { break; }
  463. }
  464. return StrText;
  465. }
  466. /// <summary>
  467. /// 循环遍历子节点
  468. /// </summary>
  469. private string TextForeachTreeNodeParentText(TreeNode node, string ObjText, ref bool Isbl)
  470. {
  471. string strText = "";
  472. foreach (TreeNode nde in node.Nodes)
  473. {
  474. if (nde.Text.Equals(ObjText))
  475. {
  476. strText = nde.Parent.Text;
  477. Isbl = true;
  478. }
  479. else
  480. {
  481. if (nde.Nodes.Count > 0)
  482. { strText = TextForeachTreeNodeParentText(nde, ObjText, ref Isbl); }
  483. }
  484. if (Isbl)
  485. { break; }
  486. }
  487. return strText;
  488. }
  489. #endregion
  490. #region 获取当前选择的最前的父节点
  491. /// <summary>
  492. /// 遍历树,根据Text获取当前所指的Tag
  493. /// </summary>
  494. /// <param name="ObjText"></param>
  495. public Hashtable TextFindParentIsParent(string ObjText)
  496. {
  497. bool Isbl = false;
  498. Hashtable htData = new Hashtable();
  499. if (ObjText != "")
  500. {
  501. foreach (TreeNode node in TreeView.Nodes)
  502. {
  503. if (node.Tag != null)
  504. {
  505. if (node.Text.Equals(ObjText))
  506. {
  507. htData = GetNodeParent(node);
  508. Isbl = true;
  509. }
  510. else
  511. { htData = TextForeachTreeNodeParentIsParent(node, ObjText, ref Isbl); }
  512. }
  513. else
  514. { htData = TextForeachTreeNodeParentIsParent(node, ObjText, ref Isbl); }
  515. if (Isbl)
  516. { break; }
  517. }
  518. }
  519. if (htData.Count <= 0)
  520. {
  521. htData["Text"] = "";
  522. htData["Tag"] = "";
  523. htData["Name"] = "";
  524. }
  525. return htData;
  526. }
  527. /// <summary>
  528. /// 循环遍历子节点
  529. /// </summary>
  530. private Hashtable TextForeachTreeNodeParentIsParent(TreeNode node, string ObjText, ref bool Isbl)
  531. {
  532. Hashtable htData = new Hashtable();
  533. foreach (TreeNode nde in node.Nodes)
  534. {
  535. if (nde.Text.Equals(ObjText))
  536. {
  537. htData = GetNodeParent(node);
  538. Isbl = true;
  539. }
  540. else
  541. {
  542. if (nde.Nodes.Count > 0)
  543. { htData = TextForeachTreeNodeParentIsParent(nde, ObjText, ref Isbl); }
  544. }
  545. if (Isbl)
  546. { break; }
  547. }
  548. return htData;
  549. }
  550. /// <summary>
  551. /// 获取当前选择的最前的父节点
  552. /// </summary>
  553. /// <param name="node"></param>
  554. /// <returns></returns>
  555. private Hashtable GetNodeParent(TreeNode node)
  556. {
  557. Hashtable htData = new Hashtable();
  558. if (node != null)
  559. {
  560. bool Isbl = true;
  561. while (Isbl)
  562. {
  563. if (node.Parent != null)
  564. {
  565. node = node.Parent;
  566. }
  567. else
  568. {
  569. htData["Text"] = node.Text.Trim();
  570. htData["Tag"] = node.Tag.ToString().Trim();
  571. htData["Name"] = node.Name.Trim();
  572. Isbl = false;
  573. }
  574. }
  575. }
  576. return htData;
  577. }
  578. #endregion
  579. #region 获取当前选择的最前的父节点
  580. /// <summary>
  581. /// 遍历树,根据Text获取当前所指的Tag
  582. /// </summary>
  583. /// <param name="ObjText"></param>
  584. public Hashtable TagFindParentIsParent(string ObjTag)
  585. {
  586. bool Isbl = false;
  587. Hashtable htData = new Hashtable();
  588. if (ObjTag != "")
  589. {
  590. foreach (TreeNode node in TreeView.Nodes)
  591. {
  592. if (node.Tag != null)
  593. {
  594. if (node.ToString().Trim().Equals(ObjTag))
  595. {
  596. htData = TagGetNodeParent(node);
  597. Isbl = true;
  598. }
  599. else
  600. { htData = TagForeachTreeNodeParentIsParent(node, ObjTag, ref Isbl); }
  601. }
  602. else
  603. { htData = TagForeachTreeNodeParentIsParent(node, ObjTag, ref Isbl); }
  604. if (Isbl)
  605. { break; }
  606. }
  607. }
  608. if (htData.Count <= 0)
  609. {
  610. htData["Text"] = "";
  611. htData["Tag"] = "";
  612. htData["Name"] = "";
  613. }
  614. return htData;
  615. }
  616. /// <summary>
  617. /// 循环遍历子节点
  618. /// </summary>
  619. private Hashtable TagForeachTreeNodeParentIsParent(TreeNode node, string ObjTag, ref bool Isbl)
  620. {
  621. Hashtable htData = new Hashtable();
  622. foreach (TreeNode nde in node.Nodes)
  623. {
  624. if (nde.Tag.ToString().Trim().Equals(ObjTag))
  625. {
  626. htData = TagGetNodeParent(node);
  627. Isbl = true;
  628. }
  629. else
  630. {
  631. if (nde.Nodes.Count > 0)
  632. { htData = TagForeachTreeNodeParentIsParent(nde, ObjTag, ref Isbl); }
  633. }
  634. if (Isbl)
  635. { break; }
  636. }
  637. return htData;
  638. }
  639. /// <summary>
  640. /// 获取当前选择的最前的父节点
  641. /// </summary>
  642. /// <param name="node"></param>
  643. /// <returns></returns>
  644. private Hashtable TagGetNodeParent(TreeNode node)
  645. {
  646. Hashtable htData = new Hashtable();
  647. if (node != null)
  648. {
  649. bool Isbl = true;
  650. while (Isbl)
  651. {
  652. if (node.Parent != null)
  653. {
  654. node = node.Parent;
  655. }
  656. else
  657. {
  658. htData["Text"] = node.Text.Trim();
  659. htData["Tag"] = node.Tag.ToString().Trim();
  660. htData["Name"] = node.Name.Trim();
  661. Isbl = false;
  662. }
  663. }
  664. }
  665. return htData;
  666. }
  667. #endregion
  668. /// <summary>
  669. /// 清除之前所选中的项的背景颜色
  670. /// </summary>
  671. /// <param name="node"></param>
  672. private void NodeClearBackColor()
  673. {
  674. foreach (TreeNode node in TreeView.Nodes)
  675. {
  676. //node.BackColor = Color.White;
  677. node.ForeColor = Color.Black;
  678. if (node.Nodes.Count > 0)
  679. { NodeClearBackColor(node); }
  680. }
  681. }
  682. /// <summary>
  683. /// 清除节点下的所有节点的背景颜色
  684. /// </summary>
  685. /// <param name="node"></param>
  686. private void NodeClearBackColor(TreeNode node)
  687. {
  688. foreach (TreeNode nde in node.Nodes)
  689. {
  690. //nde.BackColor = Color.White;
  691. nde.ForeColor = Color.Black;
  692. if (nde.Nodes.Count > 0)
  693. {
  694. NodeClearBackColor(nde);
  695. if (nde.Nodes.Count > 0)
  696. { NodeClearBackColor(nde); }
  697. }
  698. }
  699. }
  700. int _Nodelevel = 0;
  701. /// <summary>
  702. /// 无效属性
  703. /// </summary>
  704. [Obsolete("此属性过期不建议使用")]
  705. [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), Browsable(false)]
  706. public int Nodelevel
  707. {
  708. get { return _Nodelevel; }
  709. set { _Nodelevel = value; }
  710. }
  711. public TreeNode GetNodeItem_TextToTag(string ObjText)
  712. {
  713. foreach (TreeNode node in TreeView.Nodes)
  714. {
  715. if (node.Tag != null)
  716. {
  717. if (node.Text.Equals(ObjText))
  718. {
  719. return node;
  720. }
  721. else if (node.Nodes.Count > 0)
  722. {
  723. foreach (TreeNode node2 in node.Nodes)
  724. {
  725. if (node2.Tag != null)
  726. {
  727. if (node2.Text.Equals(ObjText))
  728. { return node2; }
  729. else if (node2.Nodes.Count > 0)
  730. {
  731. foreach (TreeNode node3 in node2.Nodes)
  732. {
  733. if (node3.Tag != null)
  734. {
  735. if (node3.Text.Equals(ObjText))
  736. { return node3; }
  737. }
  738. }
  739. }
  740. }
  741. }
  742. }
  743. }
  744. }
  745. return null;
  746. }
  747. public TreeNode GetNodeItem_TagToText(string ObjTag)
  748. {
  749. foreach (TreeNode node in TreeView.Nodes)
  750. {
  751. if (node.Tag != null)
  752. {
  753. if (node.Tag.Equals(ObjTag))
  754. {
  755. return node;
  756. }
  757. else if (node.Nodes.Count > 0)
  758. {
  759. foreach (TreeNode node2 in node.Nodes)
  760. {
  761. if (node2.Tag != null)
  762. {
  763. if (node2.Tag.Equals(ObjTag))
  764. { return node2; }
  765. else if (node2.Nodes.Count > 0)
  766. {
  767. foreach (TreeNode node3 in node2.Nodes)
  768. {
  769. if (node3.Tag != null)
  770. {
  771. if (node3.Tag.Equals(ObjTag))
  772. { return node3; }
  773. }
  774. }
  775. }
  776. }
  777. }
  778. }
  779. }
  780. }
  781. return null;
  782. }
  783. }
  784. }