OTSSolutionWindow.cs 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Drawing;
  4. using System.Windows.Forms;
  5. using OTS.WinFormsUI.Docking;
  6. using System.Runtime.InteropServices;
  7. using System.IO;
  8. using System.Collections;
  9. using OTSDataType;
  10. namespace OTSMeasureApp
  11. {
  12. public partial class OTSSolutionWindow : DockContent
  13. {
  14. //如果没有样品标题信息,就使用默认 "未加载样品名";
  15. public String m_DefaultSolutionName = "未加载样品名";
  16. public String m_DefaultSampleName = "样品";
  17. public OTSIncAMeasureAppForm m_MeasureAppForm = null;
  18. public OTSDisplayTreeBase m_TreeViewBase = null;
  19. //工作样品节点
  20. public TreeNode m_WorkSampleNode = null;
  21. // 设置工作样品是否成功
  22. public bool m_bSetWorkSampleFlag = false;
  23. public List<OTSSampleVisualPropertyInfo> m_TreeSampleInfoList = new List<OTSSampleVisualPropertyInfo>(); //保存Treeview所有样品节点信息
  24. //当前工作样品名
  25. public String m_WorkSampleName = "";
  26. //工作样品属性参数
  27. public CTreeSampleParam m_WorkSampleParam = new CTreeSampleParam();
  28. //国际化
  29. OTSCommon.Language lan;
  30. Hashtable table;
  31. NLog.Logger log;
  32. public OTSSolutionWindow(OTSIncAMeasureAppForm MeasureAppForm)
  33. {
  34. InitializeComponent();
  35. m_MeasureAppForm = MeasureAppForm;
  36. m_TreeViewBase = new OTSDisplayTreeBase(this);
  37. //国际化
  38. lan = new OTSCommon.Language(this);
  39. table = lan.GetNameTable(this.Name);
  40. m_DefaultSolutionName = table["m_defaultsolutionname"].ToString();
  41. m_DefaultSampleName = table["m_defaultsamplename"].ToString();
  42. }
  43. private void OTSSolutionWindow_Load(object sender, EventArgs e)
  44. {
  45. //TreeView可编辑状态。
  46. treeView1.LabelEdit = true;
  47. this.treeView1.DrawMode = System.Windows.Forms.TreeViewDrawMode.OwnerDrawAll;
  48. log = NLog.LogManager.GetCurrentClassLogger();
  49. }
  50. public void Rev_SoluWindow_SampleSortOrder_Event()
  51. {
  52. m_TreeViewBase.SortTreeNodeList();
  53. }
  54. public void DisplayExistSampleFile(List<CTreeSampleParam> TSampleParamList, CTreeSampleParam WorkSampleParam)
  55. {
  56. this.m_TreeViewBase.DisplayTreeViewData(TSampleParamList, WorkSampleParam);
  57. }
  58. public void SwitchSample(string sNewWorkSample)
  59. {
  60. m_TreeViewBase.SwitchWorkSample(sNewWorkSample);
  61. }
  62. public void AddSampleMeasure(CTreeSampleParam TSampleParam)
  63. {
  64. m_WorkSampleParam = TSampleParam;
  65. m_TreeViewBase.DisplayWorkSampleTree(m_WorkSampleParam);
  66. }
  67. //MeasureApp窗口给 OTSSolutionWindow 发送窗口删除样品回复
  68. public void DeletCurrentSampleNode()
  69. {
  70. treeView1.Nodes.Remove(m_WorkSampleNode); //移除当前工作样品
  71. }
  72. public void DisplaySample(string sDeletSName)
  73. {
  74. if ("" == sDeletSName)
  75. {
  76. return;
  77. }
  78. //重新获取Treeview上的工作样品节点
  79. this.m_TreeViewBase.GetTreeWorkSampleNode(sDeletSName);
  80. //设置工作样品焦点
  81. this.m_TreeViewBase.ReSetWorkSampleFoucs();
  82. }
  83. public void Rev_MeasureApp_CheckboxStatuChange_Event(string sSampleName, bool bCheckBoxStatu)
  84. {
  85. m_TreeViewBase.SetSampleCheckboxStatu(sSampleName, bCheckBoxStatu);
  86. }
  87. // MeasureApp 窗口给 OTSSolutionWindow 窗口编辑样品名回复
  88. public void Rev_MeasureApp_EditEditSample_Event(string sSampleOldName, string sSampleNewName)
  89. {
  90. if (sSampleNewName == "") //修改的样品新名称为空,则说明不允许修改
  91. {
  92. return;
  93. }
  94. m_TreeViewBase.EditTreeNodeSampleName(sSampleOldName, sSampleNewName);
  95. }
  96. bool bChangeNodeTextFlag = false;
  97. private void ChangeNodeText(TreeNode node, string sOldSName, string sNewSName)
  98. {
  99. // result.Add(node.Text);
  100. if (node.IsSelected)
  101. {
  102. if (node.Text == sOldSName)
  103. {
  104. node.Text = sNewSName;
  105. node.Text = " ";
  106. bChangeNodeTextFlag = true;
  107. }
  108. return;
  109. }
  110. if (node.Nodes.Count != 0)
  111. {
  112. for (int i = 0; i < node.Nodes.Count; i++)
  113. {
  114. if (!bChangeNodeTextFlag)
  115. {
  116. ChangeNodeText(node.Nodes[i], sOldSName, sNewSName);
  117. }
  118. }
  119. }
  120. }
  121. //删除测量样品
  122. string csCheckNodeName = "";
  123. public void DeleteNode_Click(object sender, EventArgs e)
  124. {
  125. if (m_bSetWorkSampleFlag) //设置工作样品成功,并可以删除当前工作样品
  126. {
  127. string sDeleteSampleName = table["message1"].ToString();
  128. sDeleteSampleName += m_WorkSampleNode.Text;
  129. if (DialogResult.OK == MessageBox.Show(sDeleteSampleName, "Tip", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning))
  130. {
  131. //删除样品成功
  132. m_MeasureAppForm.DeleteSample(m_WorkSampleNode.Text);
  133. //选择节点
  134. m_WorkSampleName = m_MeasureAppForm.m_ProjParam.GetWorkSampleName();
  135. m_TreeViewBase.GetTreeWorkSampleNode(m_WorkSampleName);
  136. //删除时重新初始化结果窗体结果
  137. m_MeasureAppForm.m_MeasureResultWindow.SetInit();
  138. }
  139. }
  140. }
  141. //sOldSName: 修改样品的原名称
  142. //sNewSName: 修改样品的新名称
  143. private void GetNodeText(TreeNode node)
  144. {
  145. if (node.Checked)
  146. {
  147. csCheckNodeName = node.Text;
  148. return;
  149. }
  150. if (node.Nodes.Count != 0)
  151. {
  152. for (int i = 0; i < node.Nodes.Count; i++)
  153. {
  154. if (csCheckNodeName == "")
  155. {
  156. GetNodeText(node.Nodes[i]);
  157. }
  158. }
  159. }
  160. }
  161. //左键
  162. private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
  163. {
  164. //鼠标选中
  165. if (e.Action == TreeViewAction.ByMouse || e.Action == TreeViewAction.ByKeyboard)
  166. {
  167. if (e.Node.IsSelected)
  168. {
  169. //判断的选中的CHECKBOX和焦点都在当前被选择的节点上,切换当前工作样品
  170. m_WorkSampleNode = e.Node;
  171. treeView1.SelectedNode = e.Node; //当前被选中
  172. // OTSSolutionWindow窗口给MeasureApp窗口发送改变工作样品请求
  173. treeView1.Refresh();
  174. string sWorkName = m_MeasureAppForm.m_ProjParam.GetWorkSampleName();
  175. if ("" != sWorkName && (sWorkName != e.Node.Text))
  176. {
  177. SwitchSample(e.Node.Text);
  178. }
  179. }
  180. }
  181. }
  182. //当Checkbox的状态发生变化时,响应事件
  183. private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
  184. {
  185. if (e.Action == TreeViewAction.ByMouse || e.Action == TreeViewAction.ByKeyboard)
  186. {
  187. // 切换工作样品
  188. string sWorkName = m_MeasureAppForm.m_ProjParam.GetWorkSampleName();
  189. if ("" != sWorkName && (sWorkName != e.Node.Text))
  190. {
  191. m_MeasureAppForm.SwitchWSample(e.Node.Text);
  192. }
  193. m_MeasureAppForm.SoluWindowCheckBoxStatuChange(e.Node.Text, e.Node.Checked);
  194. }
  195. }
  196. [DllImport("user32.dll", CharSet = CharSet.Auto)]
  197. private static extern IntPtr SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, ref TVITEM lParam);
  198. private void treeView1_DrawNode(object sender, DrawTreeNodeEventArgs e)
  199. {
  200. e.DrawDefault = true;
  201. }
  202. private const int TVIF_STATE = 0x8;
  203. private const int TVIS_STATEIMAGEMASK = 0xF000;
  204. private const int TV_FIRST = 0x1100;
  205. private const int TVM_SETITEM = TV_FIRST + 63;
  206. private void HideCheckBox(TreeView tvw, TreeNode node)
  207. {
  208. TVITEM tvi = new TVITEM();
  209. tvi.hItem = node.Handle;
  210. tvi.mask = TVIF_STATE;
  211. tvi.stateMask = TVIS_STATEIMAGEMASK;
  212. tvi.state = 0;
  213. SendMessage(tvw.Handle, TVM_SETITEM, IntPtr.Zero, ref tvi);
  214. }
  215. [StructLayout(LayoutKind.Sequential, Pack = 8, CharSet = CharSet.Auto)]
  216. private struct TVITEM
  217. {
  218. public int mask;
  219. public IntPtr hItem;
  220. public int state;
  221. public int stateMask;
  222. [MarshalAs(UnmanagedType.LPTStr)]
  223. public string lpszText;
  224. public int cchTextMax;
  225. public int iImage;
  226. public int iSelectedImage; public int cChildren; public IntPtr lParam;
  227. }
  228. //只选择子类的复选框
  229. //需要将样品测量参数编辑锁的属性 CheckOnClick 设置为True
  230. private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
  231. {
  232. NodeMouseClick(e);
  233. }
  234. protected void NodeMouseClick(TreeNodeMouseClickEventArgs e)
  235. {
  236. TreeNode tn = (TreeNode)e.Node;
  237. m_MeasureAppForm.SwitchWSample(tn.Text);
  238. //切换工作样品,通知Grid更新工作样品属性值
  239. m_bSetWorkSampleFlag = true;
  240. m_WorkSampleNode = tn;
  241. if (e.Button == MouseButtons.Right)//判断按下鼠标右键
  242. {
  243. Point ClickPoint = new Point(e.X, e.Y);
  244. TreeNode CurrentNode = treeView1.GetNodeAt(ClickPoint);
  245. bool bLockStatu = false;
  246. //获取样品节点的测量参数锁状态
  247. if (!m_TreeViewBase.GetSampleNodeLockStatu(ref bLockStatu))
  248. {
  249. log.Error("(OTSSolutionWindow.treeView1_NodeMouseClick ) m_TreeViewBase.GetSampleNodeLockStatu(m_WorkSampleNode, ref bLockStatu) = false Failed !");
  250. }
  251. SampleParaLock.Checked = bLockStatu;
  252. //显示清除测量数据
  253. COTSSample cSample = m_MeasureAppForm.m_ProjParam.GetWorkSample();
  254. if (cSample.GetName() == tn.Text)
  255. {
  256. ClearMeasureData.Visible = false;
  257. }
  258. CurrentNode.ContextMenuStrip = RightClickCheckContextMenuStrip;
  259. }
  260. //通过样品名称获取
  261. m_MeasureAppForm.m_MeasureResultWindow.UpdateResultInfoBySampleName(m_WorkSampleNode.Text);
  262. }
  263. //Treeview增加测量样品节点
  264. public void toolStripMenuItem1_AddNode_Click(object sender, EventArgs e)
  265. {
  266. // m_TreeViewBase.AddTreeViewNode();
  267. //m_MeasureAppForm.m_EventFun.Send_AddSample_SoluWindowReqMeasureApp_Event_Fun();
  268. m_MeasureAppForm.SoluwindowReqAddSample();
  269. }
  270. private void treeView1_AfterLabelEdit(object sender, NodeLabelEditEventArgs e)
  271. {
  272. if (null == e.Node.Parent)
  273. {
  274. e.CancelEdit = true;
  275. return;
  276. }
  277. //修改样品名称
  278. String csNewSampleName = e.Label; //获取新文本
  279. string csOldSampleName = e.Node.Text;//获取原来的文本
  280. if (null == csNewSampleName) //没有修改样品名 或者 样品名为空
  281. {
  282. e.CancelEdit = true;
  283. return;
  284. }
  285. //样品名为空
  286. if ("" == csNewSampleName)
  287. {
  288. e.CancelEdit = true;
  289. return;
  290. }
  291. string csNSName = csNewSampleName;
  292. //去除字符串首尾空格
  293. csNSName = csNSName.Trim();
  294. if (0 == csNSName.Length)
  295. {
  296. e.CancelEdit = true;
  297. return;
  298. }
  299. if (!m_MeasureAppForm.EditWorkSampleName(csOldSampleName, csNSName))
  300. {
  301. e.CancelEdit = true;
  302. }
  303. else
  304. {
  305. if (" " == csNewSampleName.Substring(0, 1) || " " == csNewSampleName.Substring(csNewSampleName.Length - 1, 1))
  306. {
  307. e.CancelEdit = true;
  308. Rev_MeasureApp_EditEditSample_Event(csOldSampleName, csNSName);
  309. }
  310. else
  311. {
  312. e.Node.EndEdit(false);
  313. }
  314. }
  315. }
  316. //控制显示右键系统菜单
  317. bool IsShowSysContextMenu = true;
  318. //修改选定的样品名的名字
  319. private void treeView1_BeforeLabelEdit(object sender, NodeLabelEditEventArgs e)
  320. {
  321. if (null == e.Node.Parent)
  322. {
  323. e.Node.EndEdit(false);
  324. e.CancelEdit = true;
  325. return;
  326. }
  327. //限制鼠标右键显示
  328. IsShowSysContextMenu = false;
  329. }
  330. private void treeView1_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
  331. {
  332. if (null != e.Node.Parent)
  333. {
  334. e.Node.BeginEdit(); //进入修改状态
  335. return;
  336. }
  337. //禁止修改UTILITYED
  338. e.Node.EndEdit(false);
  339. }
  340. // 清除样品测量数据
  341. private void ClearSampleMeasureData_Click(object sender, EventArgs e)
  342. {
  343. if (m_bSetWorkSampleFlag) //设置工作样品成功,并可以删除当前工作样品
  344. {
  345. string sDeleteSampleName = table["message1"].ToString();
  346. sDeleteSampleName += m_WorkSampleNode.Text;
  347. if (DialogResult.OK == MessageBox.Show(sDeleteSampleName, "Tip", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning))
  348. {
  349. //1.删除样品测量信息
  350. string mPathName = m_MeasureAppForm.m_ProjParam.GetResultData().GetPathName();
  351. string smPathName = mPathName.Substring(0, mPathName.LastIndexOf("\\"))+"\\" + m_WorkSampleNode.Text;
  352. if (DeleteFile(smPathName))
  353. {
  354. var sam= m_MeasureAppForm.m_ProjParam.GetResultData().GetSampleByName(m_WorkSampleNode.Text);
  355. sam.GetMsrStatus().ClearCompletedFieldsInfo();
  356. sam.ClearFields();
  357. sam.GetMsrStatus().SetStatus(OTS_MSR_SAMPLE_STATUS.UNMEASURED);
  358. //保存测量文件
  359. m_MeasureAppForm.m_ProjParam.GetResultData().Save();
  360. //重新打开文件
  361. }
  362. }
  363. }
  364. MessageBox.Show("The sample data has been cleared!");
  365. ClearMeasureData.Visible = false;
  366. }
  367. /// <summary>
  368. /// 根据路径删除文件
  369. /// </summary>
  370. /// <param name="path"></param>
  371. public bool DeleteFile(string path)
  372. {
  373. try
  374. {
  375. //去除文件夹和子文件的只读属性
  376. //去除文件夹的只读属性
  377. System.IO.DirectoryInfo fileInfo = new DirectoryInfo(path);
  378. fileInfo.Attributes = FileAttributes.Normal & FileAttributes.Directory;
  379. //去除文件的只读属性
  380. System.IO.File.SetAttributes(path, System.IO.FileAttributes.Normal);
  381. //判断文件夹是否还存在
  382. if (Directory.Exists(path))
  383. {
  384. foreach (string f in Directory.GetFileSystemEntries(path))
  385. {
  386. if (File.Exists(f))
  387. {
  388. using (FileStream fileStream = new FileStream(f, FileMode.Open, FileAccess.ReadWrite,FileShare.Delete))
  389. {
  390. int byteLength = (int)fileStream.Length;
  391. byte[] fileBytes = new byte[byteLength];
  392. fileStream.Read(fileBytes, 0, byteLength);
  393. //文件流关闭,文件解除锁定
  394. fileStream.Close();
  395. //如果有子文件删除文件
  396. File.SetAttributes(f, FileAttributes.Normal);
  397. File.Delete(f);
  398. }
  399. }
  400. else
  401. {
  402. //循环递归删除子文件夹
  403. DeleteFile(f);
  404. }
  405. }
  406. }
  407. return true;
  408. }
  409. catch (Exception ex) // 异常处理
  410. {
  411. return false;
  412. }
  413. }
  414. //设置样品参数锁
  415. private void SampleParaLock_Click(object sender, EventArgs e)
  416. {
  417. m_TreeViewBase.SetSampleParaLockStatu();
  418. }
  419. private void treeView1_MouseDown(object sender, MouseEventArgs e)
  420. {
  421. if (e.Button == MouseButtons.Right)
  422. {
  423. if (!IsShowSysContextMenu)
  424. {
  425. return;
  426. }
  427. }
  428. }
  429. // treeView1_ItemDrag treeView1_ItemDrag treeView1_DragDrop ,treeView1_DragOver 四个事件函数是实现节点鼠标拖动移动的。另外需要将 Treeview控件属性 AllowDrop 设置为True
  430. private void treeView1_ItemDrag(object sender, ItemDragEventArgs e)
  431. {
  432. // Move the dragged node when the left mouse button is used.
  433. if (e.Button == MouseButtons.Left)
  434. {
  435. DoDragDrop(e.Item, DragDropEffects.Move);
  436. }
  437. // Copy the dragged node when the right mouse button is used.
  438. else if (e.Button == MouseButtons.Right)
  439. {
  440. DoDragDrop(e.Item, DragDropEffects.Copy);
  441. }
  442. }
  443. private void treeView1_DragEnter(object sender, DragEventArgs e)
  444. {
  445. e.Effect = e.AllowedEffect;
  446. }
  447. private void treeView1_DragDrop(object sender, DragEventArgs e)
  448. {
  449. //获得拖放中的节点
  450. TreeNode moveNode = (TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode");
  451. //设置拖动节点为工作样品节点
  452. string sWSampleName = moveNode.Text;
  453. if ("" == sWSampleName)
  454. {
  455. log.Error("(OTSSolutionWindow.treeView1_DragDrop ) moveNode.Text = null Failed !");
  456. return;
  457. }
  458. //将拖动样品设置为工作样品
  459. if (!m_MeasureAppForm.m_ProjParam.SetWorkSample(moveNode.Text))
  460. {
  461. log.Error("(OTSSolutionWindow.treeView1_DragDrop ) m_MeasureAppForm.SetWorkSample(moveNode.Text) = false Failed !");
  462. return;
  463. }
  464. //m_MeasureAppForm.m_EventFun.Send_SwithcWSample_SoluWindowReqMeasureApp_Event_Fun(moveNode.Text);
  465. SwitchSample(moveNode.Text);
  466. //根据鼠标坐标确定要移动到的目标节点
  467. Point pt;
  468. TreeNode targeNode;
  469. pt = ((TreeView)(sender)).PointToClient(new Point(e.X, e.Y));
  470. targeNode = this.treeView1.GetNodeAt(pt);
  471. //如果未获取到节点信息 则return
  472. if (targeNode == null)
  473. {
  474. treeView1.SelectedNode = moveNode;
  475. //m_MeasureAppForm.m_EventFun.Send_SwithcWSample_SoluWindowReqMeasureApp_Event_Fun(moveNode.Text);
  476. SwitchSample(moveNode.Text);
  477. return;
  478. }
  479. //如果目标节点无子节点则添加为同级节点,反之添加到下级节点的未端
  480. TreeNode NewMoveNode = (TreeNode)moveNode.Clone();
  481. if (targeNode != null)
  482. {
  483. if (targeNode.Nodes.Count == 0)
  484. {
  485. if (moveNode.Index > targeNode.Index)
  486. {
  487. treeView1.Nodes.Insert(targeNode.Index, NewMoveNode);
  488. }
  489. else
  490. {
  491. if (targeNode.Index + 1 == treeView1.Nodes.Count)
  492. {
  493. treeView1.Nodes.Add(NewMoveNode);
  494. }
  495. else
  496. {
  497. treeView1.Nodes.Insert(targeNode.Index+1, NewMoveNode);
  498. }
  499. }
  500. }
  501. else
  502. {
  503. // targeNode.Nodes.Insert(targeNode.Nodes.Count, NewMoveNode);
  504. return;
  505. }
  506. //更新当前拖动的节点选择
  507. treeView1.SelectedNode = NewMoveNode;
  508. //展开目标节点,便于显示拖放效果
  509. targeNode.Expand();
  510. //移除拖放的节点
  511. moveNode.Remove();
  512. }
  513. else
  514. {
  515. if (moveNode.Parent != null)
  516. {
  517. moveNode.Parent.Nodes.Add(NewMoveNode);
  518. //移除拖放的节点
  519. moveNode.Remove();
  520. }
  521. }
  522. //节点位置移动后,TreeNodeList里的节点位置也应该发生变动
  523. // m_TreeViewBase.SortTreeNodeList();
  524. Rev_SoluWindow_SampleSortOrder_Event();
  525. }
  526. // Select the node under the mouse pointer to indicate the
  527. // expected drop location.
  528. private void treeView1_DragOver(object sender, DragEventArgs e)
  529. {
  530. //获得拖放中的节点
  531. //TreeNode moveNode = (TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode");
  532. // Retrieve the client coordinates of the mouse position.
  533. Point targetPoint = treeView1.PointToClient(new Point(e.X, e.Y));
  534. // Select the node at the mouse position.
  535. treeView1.SelectedNode = treeView1.GetNodeAt(targetPoint);
  536. // m_MeasureAppForm.m_EventFun.Send_SwithcWSample_SoluWindowReqMeasureApp_Event_Fun(moveNode.Text);
  537. }
  538. //拖动窗口移动响应事件
  539. private void OTSSolutionWindow_Move(object sender, EventArgs e)
  540. {
  541. }
  542. private void OTSSolutionWindow_Paint(object sender, PaintEventArgs e)
  543. {
  544. m_TreeViewBase.ReSetWorkSampleFoucs();
  545. }
  546. protected override void WndProc(ref Message m)
  547. {
  548. if (m.Msg != 0x007B)
  549. {
  550. base.WndProc(ref m);
  551. }
  552. }
  553. private void OTSSolutionWindow_SizeChanged(object sender, EventArgs e)
  554. {
  555. treeView1.Width = this.Width;
  556. }
  557. /// <summary>
  558. /// 屏蔽TreeView方向键
  559. /// </summary>
  560. /// <param name="sender"></param>
  561. /// <param name="e"></param>
  562. private void treeView1_KeyDown(object sender, KeyEventArgs e)
  563. {
  564. try
  565. {
  566. TreeView tv = (TreeView)sender;
  567. //获取子节点的总数
  568. int nodeAllCount = treeView1.Nodes[0].Nodes.Count;
  569. //当前选择节点的索引位置
  570. int currentNodeIndex = 0;
  571. currentNodeIndex = tv.SelectedNode.Index;
  572. switch (e.KeyCode)
  573. {
  574. case Keys.Up:
  575. if (currentNodeIndex == 0)
  576. {
  577. e.Handled = true;
  578. }
  579. else
  580. {
  581. for (int i = 0; i < treeView1.Nodes[0].Nodes.Count; i++)
  582. {
  583. if (i == currentNodeIndex)
  584. {
  585. treeView1.SelectedNode = treeView1.Nodes[0].Nodes[currentNodeIndex];
  586. //通过样品名称获取
  587. m_MeasureAppForm.m_MeasureResultWindow.UpdateResultInfoBySampleName(treeView1.Nodes[0].Nodes[currentNodeIndex - 1].Text);
  588. break;
  589. }
  590. }
  591. }
  592. break;
  593. case Keys.Down:
  594. if (nodeAllCount == currentNodeIndex + 1)
  595. {
  596. e.Handled = true;
  597. }
  598. else
  599. {
  600. for (int i = 0; i < treeView1.Nodes[0].Nodes.Count; i++)
  601. {
  602. if (i == currentNodeIndex)
  603. {
  604. treeView1.SelectedNode = treeView1.Nodes[0].Nodes[currentNodeIndex];
  605. //通过样品名称获取
  606. m_MeasureAppForm.m_MeasureResultWindow.UpdateResultInfoBySampleName(treeView1.Nodes[0].Nodes[currentNodeIndex + 1].Text);
  607. break;
  608. }
  609. }
  610. }
  611. break;
  612. case Keys.Left:
  613. e.Handled = true;
  614. break;
  615. case Keys.Right:
  616. e.Handled = true;
  617. break;
  618. }
  619. m_MeasureAppForm.m_SamplepaceWindow.KeyDowns();
  620. }
  621. catch (Exception)
  622. {
  623. }
  624. }
  625. private void treeView1_KeyUp(object sender, KeyEventArgs e)
  626. {
  627. m_MeasureAppForm.m_SamplepaceWindow.KeyUps();
  628. }
  629. private void reClassifyToolStripMenuItem_Click(object sender, EventArgs e)
  630. {
  631. }
  632. }
  633. }