OTSSolutionWindow.cs 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764
  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 OpenExistSampleFile(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.Rev_SoluWindowReqCheckBosStatuChange_Event(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. string sWorkName = m_MeasureAppForm.m_ProjParam.GetWorkSampleName();
  238. m_MeasureAppForm.SwitchWSample(tn.Text);
  239. //切换工作样品,通知Grid更新工作样品属性值
  240. m_bSetWorkSampleFlag = true;
  241. m_WorkSampleNode = tn;
  242. if (e.Button == MouseButtons.Right)//判断按下鼠标右键
  243. {
  244. if (!IsShowSysContextMenu)
  245. {
  246. }
  247. Point ClickPoint = new Point(e.X, e.Y);
  248. TreeNode CurrentNode = treeView1.GetNodeAt(ClickPoint);
  249. bool bLockStatu = false;
  250. //获取样品节点的测量参数锁状态
  251. if (!m_TreeViewBase.GetSampleNodeLockStatu(ref bLockStatu))
  252. {
  253. log.Error("(OTSSolutionWindow.treeView1_NodeMouseClick ) m_TreeViewBase.GetSampleNodeLockStatu(m_WorkSampleNode, ref bLockStatu) = false Failed !");
  254. }
  255. SampleParaLock.Checked = bLockStatu;
  256. //显示清除测量数据
  257. COTSSample cSample = m_MeasureAppForm.m_ProjParam.GetWorkSample();
  258. if (cSample.GetName() == tn.Text)
  259. {
  260. //当前工作样品的测量区域 获取帧图信息
  261. int CompletedFieldsCount = cSample.GetMsrStatus().GetCompletedFields();
  262. if (CompletedFieldsCount > 0)
  263. {
  264. ClearMeasureData.Visible = true;
  265. }
  266. else
  267. {
  268. ClearMeasureData.Visible = false;
  269. }
  270. }
  271. CurrentNode.ContextMenuStrip = RightClickCheckContextMenuStrip;
  272. }
  273. //通过样品名称获取
  274. m_MeasureAppForm.m_MeasureResultWindow.GetResultFileInfoBySampleName(m_WorkSampleNode.Text);
  275. }
  276. //Treeview增加测量样品节点
  277. public void toolStripMenuItem1_AddNode_Click(object sender, EventArgs e)
  278. {
  279. // m_TreeViewBase.AddTreeViewNode();
  280. //m_MeasureAppForm.m_EventFun.Send_AddSample_SoluWindowReqMeasureApp_Event_Fun();
  281. m_MeasureAppForm.SoluwindowReqAddSample();
  282. }
  283. private void treeView1_AfterLabelEdit(object sender, NodeLabelEditEventArgs e)
  284. {
  285. if (null == e.Node.Parent)
  286. {
  287. // e.Node.EndEdit(false);
  288. e.CancelEdit = true;
  289. return;
  290. }
  291. //修改样品名称
  292. String csNewSampleName = e.Label; //获取新文本
  293. string csOldSampleName = e.Node.Text;//获取原来的文本
  294. if (null == csNewSampleName) //没有修改样品名 或者 样品名为空
  295. {
  296. e.CancelEdit = true;
  297. return;
  298. }
  299. //样品名为空
  300. if ("" == csNewSampleName)
  301. {
  302. e.CancelEdit = true;
  303. return;
  304. }
  305. string csNSName = csNewSampleName;
  306. //去除字符串首尾空格
  307. csNSName = csNSName.Trim();
  308. if (0 == csNSName.Length)
  309. {
  310. e.CancelEdit = true;
  311. return;
  312. }
  313. // m_MeasureAppForm.m_EventFun.Send_EditSample_SoluWindowReqMeasureApp_Event_Fun(csOldSampleName, csNewSampleName);
  314. if (!m_MeasureAppForm.EditWorkSampleName(csOldSampleName, csNSName))
  315. {
  316. e.CancelEdit = true;
  317. }
  318. else
  319. {
  320. if (" " == csNewSampleName.Substring(0, 1) || " " == csNewSampleName.Substring(csNewSampleName.Length - 1, 1))
  321. {
  322. e.CancelEdit = true;
  323. //m_MeasureAppForm.m_EventFun.Send_EditSample_SoluWindowRevMeasureApp_Event_Fun(csOldSampleName, csNSName);
  324. Rev_MeasureApp_EditEditSample_Event(csOldSampleName, csNSName);
  325. }
  326. else
  327. {
  328. e.Node.EndEdit(false);
  329. }
  330. }
  331. }
  332. //控制显示右键系统菜单
  333. bool IsShowSysContextMenu = true;
  334. //修改选定的样品名的名字
  335. private void treeView1_BeforeLabelEdit(object sender, NodeLabelEditEventArgs e)
  336. {
  337. if (null == e.Node.Parent)
  338. {
  339. e.Node.EndEdit(false);
  340. e.CancelEdit = true;
  341. return;
  342. }
  343. string csSameNodeName = e.Node.Text;
  344. string csNewName = e.Label;
  345. //限制鼠标右键显示
  346. IsShowSysContextMenu = false;
  347. }
  348. private void treeView1_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
  349. {
  350. if (null != e.Node.Parent)
  351. {
  352. e.Node.BeginEdit(); //进入修改状态
  353. return;
  354. }
  355. //禁止修改UTILITYED
  356. e.Node.EndEdit(false);
  357. }
  358. // 清除样品测量数据
  359. private void ClearSampleMeasureData_Click(object sender, EventArgs e)
  360. {
  361. if (m_bSetWorkSampleFlag) //设置工作样品成功,并可以删除当前工作样品
  362. {
  363. string sDeleteSampleName = table["message1"].ToString();
  364. sDeleteSampleName += m_WorkSampleNode.Text;
  365. if (DialogResult.OK == MessageBox.Show(sDeleteSampleName, "Tip", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning))
  366. {
  367. //1.删除样品测量信息
  368. string mPathName = m_MeasureAppForm.m_ProjParam.GetResultData().GetPathName();
  369. string smPathName = mPathName.Substring(0, mPathName.LastIndexOf("\\"))+"\\" + m_WorkSampleNode.Text;
  370. if (DeleteFile(smPathName))
  371. {
  372. var sam= m_MeasureAppForm.m_ProjParam.GetResultData().GetSampleByName(m_WorkSampleNode.Text);
  373. sam.GetMsrStatus().ClearCompletedFieldsInfo();
  374. sam.ClearFields();
  375. sam.GetMsrStatus().SetStatus(OTS_MSR_SAMPLE_STATUS.UNMEASURED);
  376. //保存测量文件
  377. m_MeasureAppForm.m_ProjParam.GetResultData().Save();
  378. //重新打开文件
  379. }
  380. }
  381. }
  382. MessageBox.Show("The sample data has been cleared!");
  383. ClearMeasureData.Visible = false;
  384. }
  385. /// <summary>
  386. /// 根据路径删除文件
  387. /// </summary>
  388. /// <param name="path"></param>
  389. public bool DeleteFile(string path)
  390. {
  391. try
  392. {
  393. //去除文件夹和子文件的只读属性
  394. //去除文件夹的只读属性
  395. System.IO.DirectoryInfo fileInfo = new DirectoryInfo(path);
  396. fileInfo.Attributes = FileAttributes.Normal & FileAttributes.Directory;
  397. //去除文件的只读属性
  398. System.IO.File.SetAttributes(path, System.IO.FileAttributes.Normal);
  399. //判断文件夹是否还存在
  400. if (Directory.Exists(path))
  401. {
  402. foreach (string f in Directory.GetFileSystemEntries(path))
  403. {
  404. if (File.Exists(f))
  405. {
  406. using (FileStream fileStream = new FileStream(f, FileMode.Open, FileAccess.ReadWrite,FileShare.Delete))
  407. {
  408. int byteLength = (int)fileStream.Length;
  409. byte[] fileBytes = new byte[byteLength];
  410. fileStream.Read(fileBytes, 0, byteLength);
  411. //文件流关闭,文件解除锁定
  412. fileStream.Close();
  413. //如果有子文件删除文件
  414. File.SetAttributes(f, FileAttributes.Normal);
  415. File.Delete(f);
  416. }
  417. }
  418. else
  419. {
  420. //循环递归删除子文件夹
  421. DeleteFile(f);
  422. }
  423. }
  424. }
  425. return true;
  426. }
  427. catch (Exception ex) // 异常处理
  428. {
  429. return false;
  430. }
  431. }
  432. //设置样品参数锁
  433. private void SampleParaLock_Click(object sender, EventArgs e)
  434. {
  435. //m_MeasureAppForm.m_LogFunExport.TraceLog("(OTSSolutionWindow.SampleParaLock_Click) Set Sample Para Lock");
  436. m_TreeViewBase.SetSampleParaLockStatu();
  437. }
  438. private void treeView1_MouseDown(object sender, MouseEventArgs e)
  439. {
  440. if (e.Button == MouseButtons.Right)
  441. {
  442. if (!IsShowSysContextMenu)
  443. {
  444. return;
  445. }
  446. }
  447. }
  448. // treeView1_ItemDrag treeView1_ItemDrag treeView1_DragDrop ,treeView1_DragOver 四个事件函数是实现节点鼠标拖动移动的。另外需要将 Treeview控件属性 AllowDrop 设置为True
  449. private void treeView1_ItemDrag(object sender, ItemDragEventArgs e)
  450. {
  451. // DoDragDrop(e.Item, DragDropEffects.Move);
  452. // Move the dragged node when the left mouse button is used.
  453. if (e.Button == MouseButtons.Left)
  454. {
  455. DoDragDrop(e.Item, DragDropEffects.Move);
  456. }
  457. // Copy the dragged node when the right mouse button is used.
  458. else if (e.Button == MouseButtons.Right)
  459. {
  460. DoDragDrop(e.Item, DragDropEffects.Copy);
  461. }
  462. }
  463. private void treeView1_DragEnter(object sender, DragEventArgs e)
  464. {
  465. e.Effect = e.AllowedEffect;
  466. }
  467. private void treeView1_DragDrop(object sender, DragEventArgs e)
  468. {
  469. //获得拖放中的节点
  470. TreeNode moveNode = (TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode");
  471. //设置拖动节点为工作样品节点
  472. string sWSampleName = moveNode.Text;
  473. if ("" == sWSampleName)
  474. {
  475. log.Error("(OTSSolutionWindow.treeView1_DragDrop ) moveNode.Text = null Failed !");
  476. return;
  477. }
  478. //将拖动样品设置为工作样品
  479. if (!m_MeasureAppForm.m_ProjParam.SetWorkSample(moveNode.Text))
  480. {
  481. log.Error("(OTSSolutionWindow.treeView1_DragDrop ) m_MeasureAppForm.SetWorkSample(moveNode.Text) = false Failed !");
  482. return;
  483. }
  484. //m_MeasureAppForm.m_EventFun.Send_SwithcWSample_SoluWindowReqMeasureApp_Event_Fun(moveNode.Text);
  485. SwitchSample(moveNode.Text);
  486. //根据鼠标坐标确定要移动到的目标节点
  487. Point pt;
  488. TreeNode targeNode;
  489. pt = ((TreeView)(sender)).PointToClient(new Point(e.X, e.Y));
  490. targeNode = this.treeView1.GetNodeAt(pt);
  491. //如果未获取到节点信息 则return
  492. if (targeNode == null)
  493. {
  494. treeView1.SelectedNode = moveNode;
  495. //m_MeasureAppForm.m_EventFun.Send_SwithcWSample_SoluWindowReqMeasureApp_Event_Fun(moveNode.Text);
  496. SwitchSample(moveNode.Text);
  497. return;
  498. }
  499. //如果目标节点无子节点则添加为同级节点,反之添加到下级节点的未端
  500. TreeNode NewMoveNode = (TreeNode)moveNode.Clone();
  501. if (targeNode != null)
  502. {
  503. if (targeNode.Nodes.Count == 0)
  504. {
  505. if (moveNode.Index > targeNode.Index)
  506. {
  507. treeView1.Nodes.Insert(targeNode.Index, NewMoveNode);
  508. }
  509. else
  510. {
  511. if (targeNode.Index + 1 == treeView1.Nodes.Count)
  512. {
  513. treeView1.Nodes.Add(NewMoveNode);
  514. }
  515. else
  516. {
  517. treeView1.Nodes.Insert(targeNode.Index+1, NewMoveNode);
  518. }
  519. }
  520. }
  521. else
  522. {
  523. // targeNode.Nodes.Insert(targeNode.Nodes.Count, NewMoveNode);
  524. return;
  525. }
  526. //更新当前拖动的节点选择
  527. treeView1.SelectedNode = NewMoveNode;
  528. //展开目标节点,便于显示拖放效果
  529. targeNode.Expand();
  530. //移除拖放的节点
  531. moveNode.Remove();
  532. }
  533. else
  534. {
  535. if (moveNode.Parent != null)
  536. {
  537. moveNode.Parent.Nodes.Add(NewMoveNode);
  538. //移除拖放的节点
  539. moveNode.Remove();
  540. }
  541. }
  542. //节点位置移动后,TreeNodeList里的节点位置也应该发生变动
  543. // m_TreeViewBase.SortTreeNodeList();
  544. Rev_SoluWindow_SampleSortOrder_Event();
  545. }
  546. // Select the node under the mouse pointer to indicate the
  547. // expected drop location.
  548. private void treeView1_DragOver(object sender, DragEventArgs e)
  549. {
  550. //获得拖放中的节点
  551. //TreeNode moveNode = (TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode");
  552. // Retrieve the client coordinates of the mouse position.
  553. Point targetPoint = treeView1.PointToClient(new Point(e.X, e.Y));
  554. // Select the node at the mouse position.
  555. treeView1.SelectedNode = treeView1.GetNodeAt(targetPoint);
  556. // m_MeasureAppForm.m_EventFun.Send_SwithcWSample_SoluWindowReqMeasureApp_Event_Fun(moveNode.Text);
  557. }
  558. //拖动窗口移动响应事件
  559. private void OTSSolutionWindow_Move(object sender, EventArgs e)
  560. {
  561. }
  562. private void OTSSolutionWindow_Paint(object sender, PaintEventArgs e)
  563. {
  564. m_TreeViewBase.ReSetWorkSampleFoucs();
  565. }
  566. protected override void WndProc(ref Message m)
  567. {
  568. if (m.Msg != 0x007B)
  569. {
  570. base.WndProc(ref m);
  571. }
  572. }
  573. private void OTSSolutionWindow_SizeChanged(object sender, EventArgs e)
  574. {
  575. treeView1.Width = this.Width;
  576. }
  577. /// <summary>
  578. /// 屏蔽TreeView方向键
  579. /// </summary>
  580. /// <param name="sender"></param>
  581. /// <param name="e"></param>
  582. private void treeView1_KeyDown(object sender, KeyEventArgs e)
  583. {
  584. try
  585. {
  586. TreeView tv = (TreeView)sender;
  587. //获取子节点的总数
  588. int nodeAllCount = treeView1.Nodes[0].Nodes.Count;
  589. //当前选择节点的索引位置
  590. int currentNodeIndex = 0;
  591. currentNodeIndex = tv.SelectedNode.Index;
  592. switch (e.KeyCode)
  593. {
  594. case Keys.Up:
  595. if (currentNodeIndex == 0)
  596. {
  597. e.Handled = true;
  598. }
  599. else
  600. {
  601. for (int i = 0; i < treeView1.Nodes[0].Nodes.Count; i++)
  602. {
  603. if (i == currentNodeIndex)
  604. {
  605. treeView1.SelectedNode = treeView1.Nodes[0].Nodes[currentNodeIndex];
  606. //通过样品名称获取
  607. m_MeasureAppForm.m_MeasureResultWindow.GetResultFileInfoBySampleName(treeView1.Nodes[0].Nodes[currentNodeIndex - 1].Text);
  608. break;
  609. }
  610. }
  611. }
  612. break;
  613. case Keys.Down:
  614. if (nodeAllCount == currentNodeIndex + 1)
  615. {
  616. e.Handled = true;
  617. }
  618. else
  619. {
  620. for (int i = 0; i < treeView1.Nodes[0].Nodes.Count; i++)
  621. {
  622. if (i == currentNodeIndex)
  623. {
  624. treeView1.SelectedNode = treeView1.Nodes[0].Nodes[currentNodeIndex];
  625. //通过样品名称获取
  626. m_MeasureAppForm.m_MeasureResultWindow.GetResultFileInfoBySampleName(treeView1.Nodes[0].Nodes[currentNodeIndex + 1].Text);
  627. break;
  628. }
  629. }
  630. }
  631. break;
  632. case Keys.Left:
  633. e.Handled = true;
  634. break;
  635. case Keys.Right:
  636. e.Handled = true;
  637. break;
  638. }
  639. m_MeasureAppForm.m_SamplepaceWindow.KeyDowns();
  640. }
  641. catch (Exception)
  642. {
  643. }
  644. }
  645. private void treeView1_KeyUp(object sender, KeyEventArgs e)
  646. {
  647. m_MeasureAppForm.m_SamplepaceWindow.KeyUps();
  648. }
  649. private void reClassifyToolStripMenuItem_Click(object sender, EventArgs e)
  650. {
  651. }
  652. }
  653. }