版博士V2.0程序
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

728 regels
31 KiB

  1. using CCWin.Win32;
  2. using MaiMuAOI.SysCtrl;
  3. using MaiMuAOI.SysUI.DefectPicShow;
  4. using MaiMuAOI.SysUI.ProcessStep.Prop;
  5. using MaiMuAOI.SysUI.ProductAndStep;
  6. using Models;
  7. using Newtonsoft.Json.Linq;
  8. using OpenCvSharp.Flann;
  9. using ProductionControl.UI;
  10. using System;
  11. using System.Collections.Generic;
  12. using System.ComponentModel;
  13. using System.Data;
  14. using System.Drawing;
  15. using System.Linq;
  16. using System.Text;
  17. using System.Threading;
  18. using System.Threading.Tasks;
  19. using System.Windows.Forms;
  20. namespace MaiMuAOI.SysUI.ProcessStep
  21. {
  22. public partial class StepProcessFrm : Form
  23. {
  24. public int StepID = 0;
  25. Service.StepService service = new Service.StepService();
  26. Models.Step model = new Models.Step();
  27. DebugTestFrm frm;
  28. //工序库参数
  29. string LibprocessCode;
  30. TensionProp _libTensionProp;
  31. ThicknessProp _libThicknessProp;
  32. LensProp _libLensProp;
  33. LightProp _libLightProp;
  34. MarkProp _libMarkProp;
  35. PointTestProp _libPointTestProp;
  36. SizeDefectProp _libSizeDefectProp;
  37. ForProp _libForProp;
  38. //流程参数
  39. TensionProp _ProcessTensionProp;
  40. ThicknessProp _ProcessThicknessProp;
  41. LensProp _ProcessLensProp;
  42. LightProp _ProcessLightProp;
  43. MarkProp _ProcessMarkProp;
  44. PointTestProp _ProcessPointTestProp;
  45. SizeDefectProp _ProcessSizeDefectProp;
  46. ForProp _ProcessForProp;
  47. SynchronizationContext SyncContext = null;
  48. public StepProcessFrm(Models.Step m = null)
  49. {
  50. InitializeComponent();
  51. UIStyle.SetUIStyle(this);
  52. this.uiTitel1.FatherForm = this;
  53. dataGridView1.AutoGenerateColumns = false;
  54. dataGridView2.AutoGenerateColumns = false;
  55. //显示行号与列宽度自动调整
  56. dataGridView2.RowHeadersVisible = true;
  57. dataGridView2.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders;
  58. dataGridView2.RowPostPaint += (sender, e) =>
  59. {
  60. SysMgr.showRowNum_onDataGrid_RowPostPaint(this.dataGridView2, sender, e);
  61. };
  62. dataGridView1.DefaultCellStyle.ForeColor = Color.Black;
  63. dataGridView2.DefaultCellStyle.ForeColor = Color.Black;
  64. //获取UI线程同步上下文
  65. SyncContext = SynchronizationContext.Current;
  66. if (m == null)
  67. model.ProcessList = new List<Models.StepProcess>();
  68. else
  69. model = m;
  70. }
  71. private void InitDataView()
  72. {
  73. this.Cursor = Cursors.WaitCursor;
  74. dataGridView1.Columns.Add("colCode", "code");
  75. //DataGridViewComboBoxColumn col = new DataGridViewComboBoxColumn();
  76. //col.Name = "colName";
  77. //col.HeaderText = "工序";
  78. //dataGridView1.Columns.Add(col);
  79. dataGridView1.Columns.Add("colName", "工序");
  80. dataGridView1.Columns[0].Visible = false;
  81. dataGridView1.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
  82. foreach (var item in SysMgr.ProcessType)
  83. dataGridView1.Rows.Add(item.Key, item.Value);
  84. for (int i = 0; i < this.dataGridView1.Columns.Count; i++)
  85. {
  86. this.dataGridView1.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable;
  87. }
  88. int rowHeight = (dataGridView1.Height - dataGridView1.ColumnHeadersHeight - 5)/ dataGridView1.Rows.Count;
  89. for (int i = 0; i < this.dataGridView1.Rows.Count; i++)
  90. {
  91. this.dataGridView1.Rows[i].Height = rowHeight;
  92. }
  93. //
  94. this.txtCode.Text = model.Code;
  95. this.txtName.Text = model.Name;
  96. this.numStartTimeIndex.Value = model.StartTimeIndex;
  97. if (model.ProcessList != null)
  98. dataGridView2.DataSource = new BindingSource(model.ProcessList, null);
  99. for (int i = 0; i < this.dataGridView2.Columns.Count; i++)
  100. {
  101. this.dataGridView2.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable;
  102. }
  103. this.Cursor = Cursors.Default;
  104. }
  105. private void StepProcessFrm_Load(object sender, EventArgs e)
  106. {
  107. InitDataView();
  108. }
  109. #region private
  110. private void reOrderProcess()
  111. {
  112. for (int i = 0; i < model.ProcessList.Count; i++)
  113. model.ProcessList[i].Order = i;
  114. }
  115. private void refreshDataGridView()
  116. {
  117. dataGridView2.DataSource = null;
  118. dataGridView2.DataSource = new BindingSource(model.ProcessList, null);
  119. }
  120. #endregion
  121. #region 工具栏
  122. private void tsbtnSave_Click(object sender, EventArgs e)
  123. {
  124. try
  125. {
  126. SaveOldValue();
  127. string szCode = this.txtCode.Text.Trim();
  128. string szName = this.txtName.Text.Trim();
  129. if (szCode == "" || szName == "")
  130. throw new Exception("请填写编号和名称!");
  131. if (model.ProcessList == null || model.ProcessList.Count == 0)
  132. throw new Exception("请添加流程工序!");
  133. int index = 0;
  134. int TensionCnt = 0;
  135. foreach (var item in model.ProcessList)
  136. {
  137. if (string.IsNullOrWhiteSpace(item.ProcessParams))
  138. throw new Exception($"{SysMgr.ProcessType[item.ProcessCode]} 配方未设置!");
  139. //张力检测一定要第一步,防呆
  140. if (item.ProcessCode == "Tension" && index != 0)
  141. {
  142. throw new Exception("张力测量工序必须在第一步!");
  143. }
  144. else if (item.ProcessCode == "Tension")
  145. {
  146. TensionCnt++;//记录张力测试是否重复
  147. }
  148. if(TensionCnt >1)
  149. throw new Exception("张力测量工序只能存在一次!");
  150. if (item.ProcessCode == "Height" )
  151. {
  152. if(TensionCnt >0 && index != 1)
  153. throw new Exception("厚度测量工序必须在张力测量工序之后!");
  154. else if (TensionCnt == 0 && index != 0)
  155. throw new Exception("厚度测量工序必须在第一步!");
  156. }
  157. List<StepProcess> tlist = model.ProcessList.GroupBy(p => p.ProcessName).Select(q => q.First()).ToList();
  158. if (tlist.Count() != model.ProcessList.Count())
  159. {
  160. throw new Exception("步骤名称重复!");
  161. }
  162. index++;
  163. }
  164. model.ProcessType = "快速流程";
  165. model.Code = szCode;
  166. model.Name = szName;
  167. model.StartTimeIndex = (int)numStartTimeIndex.Value;
  168. model.ModifyUserCode = SysMgr.Instance.UserMgr.LoginUser.Code;
  169. bool result;
  170. if (model.Id == 0)
  171. {
  172. model.CreateUserCode = SysMgr.Instance.UserMgr.LoginUser.Code;
  173. result = service.InsertNav(model);
  174. model = service.GetListNav(0).Find(x => x.Code == szCode && x.Name == szName);
  175. }
  176. else
  177. result = service.UpdateNav(model);
  178. StepID = model.Id;
  179. if (!result)
  180. throw new Exception("保存失败!");
  181. MessageBox.Show("保存成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
  182. this.Close();
  183. }
  184. catch (Exception ex)
  185. {
  186. MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
  187. }
  188. }
  189. private void tsbtnExit_Click(object sender, EventArgs e)
  190. {
  191. this.Close();
  192. }
  193. private void tsbDebug_Click(object sender, EventArgs e)
  194. {
  195. if ((frm == null) || (frm.IsDisposed))
  196. frm = new DebugTestFrm();
  197. //frm.TopMost = true;
  198. frm.Show();
  199. }
  200. #endregion
  201. #region 工序库表格
  202. private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
  203. {
  204. int Index = this.dataGridView1.CurrentRow.Index;//获取当前选中行的索引
  205. if (Index < this.dataGridView1.Rows.Count)
  206. {
  207. string processCode = this.dataGridView1.Rows[Index].Cells["colCode"].Value.ToString();
  208. bool IsSupport = SysMgr.ProcessType.ContainsKey(processCode);
  209. if (IsSupport)
  210. {
  211. LibprocessCode = processCode;
  212. switch (processCode)
  213. {
  214. case "Tension":
  215. _libTensionProp = new TensionProp();
  216. LibPropertyGrid.SelectedObject = _libTensionProp;
  217. break;
  218. case "Height":
  219. _libThicknessProp = new ThicknessProp();
  220. LibPropertyGrid.SelectedObject = _libThicknessProp;
  221. break;
  222. case "LensMotor":
  223. _libLensProp = new LensProp();
  224. LibPropertyGrid.SelectedObject = _libLensProp;
  225. break;
  226. case "Light":
  227. _libLightProp = new LightProp();
  228. LibPropertyGrid.SelectedObject = _libLightProp;
  229. break;
  230. case "Mark":
  231. _libMarkProp = new MarkProp();
  232. LibPropertyGrid.SelectedObject = _libMarkProp;
  233. break;
  234. case "PointTest":
  235. _libPointTestProp = new PointTestProp();
  236. LibPropertyGrid.SelectedObject = _libPointTestProp;
  237. break;
  238. case "SizeAndDefect":
  239. _libSizeDefectProp = new SizeDefectProp();
  240. LibPropertyGrid.SelectedObject = _libSizeDefectProp;
  241. break;
  242. case "For":
  243. _libForProp = new ForProp();
  244. LibPropertyGrid.SelectedObject = _libForProp;
  245. break;
  246. }
  247. LibPropertyGrid.Refresh();
  248. this.Refresh();
  249. }
  250. else
  251. {
  252. //MessageBox.Show("不支持改功能!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Information );
  253. }
  254. }
  255. }
  256. #endregion
  257. #region 流程表格
  258. //单元格编译完成
  259. private void dataGridView2_CellEndEdit(object sender, DataGridViewCellEventArgs e)
  260. {
  261. var value = dataGridView2.Rows[e.RowIndex].Cells["colProcessName"].Value;
  262. if (value == null || value.ToString().Trim() == "")
  263. {
  264. dataGridView2.Rows[e.RowIndex].Cells["colProcessName"].Value = dataGridView2.Rows[e.RowIndex].Cells["colTypeName"].Value;
  265. }
  266. }
  267. int oldIndex = 0;
  268. string oldProcessCode = "";
  269. private void dataGridView2_CellClick(object sender, DataGridViewCellEventArgs e)
  270. {
  271. int Index = this.dataGridView2.CurrentRow.Index;//获取当前选中行的索引
  272. if (Index < this.dataGridView2.Rows.Count)
  273. {
  274. SaveOldValue();
  275. string processCode = this.dataGridView2.Rows[Index].Cells["colProcessCode"].Value.ToString();
  276. string processParams = this.dataGridView2.Rows[Index].Cells["colProcessParams"].Value.ToString();
  277. bool IsSupport = SysMgr.ProcessType.ContainsKey(processCode);
  278. oldIndex = Index;
  279. if (IsSupport)
  280. {
  281. oldProcessCode = processCode;
  282. switch (processCode)
  283. {
  284. case "Tension":
  285. _ProcessTensionProp = new TensionProp();
  286. _ProcessTensionProp.deserialize(processParams);
  287. ProcessPropertyGrid.SelectedObject = _ProcessTensionProp;
  288. break;
  289. case "Height":
  290. _ProcessThicknessProp = new ThicknessProp();
  291. _ProcessThicknessProp.deserialize(processParams);
  292. ProcessPropertyGrid.SelectedObject = _ProcessThicknessProp;
  293. break;
  294. case "LensMotor":
  295. _ProcessLensProp = new LensProp();
  296. _ProcessLensProp.deserialize(processParams);
  297. ProcessPropertyGrid.SelectedObject = _ProcessLensProp;
  298. break;
  299. case "Light":
  300. _ProcessLightProp = new LightProp();
  301. _ProcessLightProp.deserialize(processParams);
  302. ProcessPropertyGrid.SelectedObject = _ProcessLightProp;
  303. break;
  304. case "Mark":
  305. _ProcessMarkProp = new MarkProp();
  306. _ProcessMarkProp.deserialize(processParams);
  307. ProcessPropertyGrid.SelectedObject = _ProcessMarkProp;
  308. break;
  309. case "PointTest":
  310. _ProcessPointTestProp = new PointTestProp();
  311. _ProcessPointTestProp.deserialize(processParams);
  312. ProcessPropertyGrid.SelectedObject = _ProcessPointTestProp;
  313. break;
  314. case "SizeAndDefect":
  315. _ProcessSizeDefectProp = new SizeDefectProp();
  316. _ProcessSizeDefectProp.deserialize(processParams);
  317. ProcessPropertyGrid.SelectedObject = _ProcessSizeDefectProp;
  318. break;
  319. case "For":
  320. _ProcessForProp = new ForProp();
  321. _ProcessForProp.deserialize(processParams);
  322. ProcessPropertyGrid.SelectedObject = _ProcessForProp;
  323. break;
  324. }
  325. ProcessPropertyGrid.Refresh();
  326. this.Refresh();
  327. }
  328. else
  329. {
  330. //MessageBox.Show("不支持改功能!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Information );
  331. }
  332. }
  333. }
  334. private void SaveOldValue()
  335. {
  336. bool IsSupport = SysMgr.ProcessType.ContainsKey(oldProcessCode);
  337. if (oldIndex >= this.dataGridView2.Rows.Count)
  338. return;
  339. if (IsSupport)
  340. {
  341. switch (oldProcessCode)
  342. {
  343. case "Tension":
  344. this.dataGridView2.Rows[oldIndex].Cells["colProcessParams"].Value = _ProcessTensionProp.serialize();
  345. break;
  346. case "Height":
  347. this.dataGridView2.Rows[oldIndex].Cells["colProcessParams"].Value = _ProcessThicknessProp.serialize();
  348. break;
  349. case "LensProp":
  350. this.dataGridView2.Rows[oldIndex].Cells["colProcessParams"].Value = _ProcessLensProp.serialize();
  351. break;
  352. case "Light":
  353. this.dataGridView2.Rows[oldIndex].Cells["colProcessParams"].Value = _ProcessLightProp.serialize();
  354. break;
  355. case "Mark":
  356. this.dataGridView2.Rows[oldIndex].Cells["colProcessParams"].Value = _ProcessMarkProp.serialize();
  357. break;
  358. case "SizeAndDefect":
  359. this.dataGridView2.Rows[oldIndex].Cells["colProcessParams"].Value = _ProcessSizeDefectProp.serialize();
  360. break;
  361. case "PointTest":
  362. this.dataGridView2.Rows[oldIndex].Cells["colProcessParams"].Value = _ProcessPointTestProp.serialize();
  363. break;
  364. case "For":
  365. this.dataGridView2.Rows[oldIndex].Cells["colProcessParams"].Value = _ProcessForProp.serialize();
  366. break;
  367. }
  368. }
  369. }
  370. private void dataGridView2_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
  371. {
  372. for (int i = 0; i < dataGridView2.Rows.Count; i++)
  373. {
  374. if (SysMgr.ProcessType.ContainsKey(dataGridView2.Rows[i].Cells[0].Value.ToString()))
  375. {
  376. dataGridView2.Rows[i].Cells["colTypeName"].Value = SysMgr.ProcessType[dataGridView2.Rows[i].Cells[0].Value.ToString()];
  377. }
  378. else
  379. {
  380. dataGridView2.Rows[i].Cells["colTypeName"].Value = "不支持";
  381. dataGridView2.Rows[i].DefaultCellStyle.BackColor = Color.Yellow;
  382. }
  383. }
  384. }
  385. #endregion
  386. #region 操作按钮
  387. private void btnAdd_Click(object sender, EventArgs e)
  388. {
  389. try
  390. {
  391. if (this.dataGridView1.SelectedRows.Count != 1)
  392. throw new Exception("请选择要插入的工序!");
  393. string processCode = this.dataGridView1.SelectedRows[0].Cells[0].Value.ToString();
  394. string processParams = "";
  395. switch (LibprocessCode)
  396. {
  397. case "Tension":
  398. processParams = _libTensionProp.serialize();
  399. break;
  400. case "Height":
  401. processParams = _libThicknessProp.serialize();
  402. break;
  403. case "LensMotor":
  404. processParams = _libLensProp.serialize();
  405. break;
  406. case "Light":
  407. processParams = _libLightProp.serialize();
  408. break;
  409. case "Mark":
  410. processParams = _libMarkProp.serialize();
  411. break;
  412. case "PointTest":
  413. processParams = _libPointTestProp.serialize();
  414. break;
  415. case "SizeAndDefect":
  416. processParams = _libSizeDefectProp.serialize();
  417. break;
  418. case "For":
  419. processParams = _libForProp.serialize();
  420. break;
  421. }
  422. model.ProcessList.Add(new Models.StepProcess()
  423. {
  424. ProcessCode = processCode,
  425. ProcessName = SysMgr.ProcessType[processCode],
  426. ModifyUserCode = SysMgr.Instance.UserMgr.LoginUser.Code,
  427. CreateUserCode = SysMgr.Instance.UserMgr.LoginUser.Code,
  428. ProcessParams = processParams
  429. });
  430. reOrderProcess();
  431. this.refreshDataGridView();
  432. this.dataGridView2.Rows[this.dataGridView2.Rows.Count - 1].Selected = true;
  433. dataGridView2.CurrentCell = dataGridView2.Rows[this.dataGridView2.Rows.Count - 1].Cells[1];
  434. }
  435. catch (Exception ex)
  436. {
  437. MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
  438. }
  439. }
  440. private void btnInsert_Click(object sender, EventArgs e)
  441. {
  442. try
  443. {
  444. if (this.dataGridView1.SelectedRows.Count != 1)
  445. throw new Exception("请选择要插入的工序!");
  446. string processCode = this.dataGridView1.SelectedRows[0].Cells[0].Value.ToString();
  447. int liInsertIndex = this.dataGridView2.Rows.Count;
  448. if (this.dataGridView2.SelectedRows.Count > 0)
  449. liInsertIndex = this.dataGridView2.SelectedRows[0].Index;
  450. if (liInsertIndex <= oldIndex)
  451. oldIndex++;
  452. string processParams = "";
  453. switch (LibprocessCode)
  454. {
  455. case "Tension":
  456. processParams = _libTensionProp.serialize();
  457. break;
  458. case "Height":
  459. processParams = _libThicknessProp.serialize();
  460. break;
  461. case "LensMotor":
  462. processParams = _libLensProp.serialize();
  463. break;
  464. case "Light":
  465. processParams = _libLightProp.serialize();
  466. break;
  467. case "Mark":
  468. processParams = _libMarkProp.serialize();
  469. break;
  470. case "PointTest":
  471. processParams = _libPointTestProp.serialize();
  472. break;
  473. case "SizeAndDefect":
  474. processParams = _libSizeDefectProp.serialize();
  475. break;
  476. }
  477. model.ProcessList.Insert(liInsertIndex, new Models.StepProcess()
  478. {
  479. ProcessCode = processCode,
  480. ProcessName = SysMgr.ProcessType[processCode],
  481. Order = liInsertIndex,
  482. ModifyUserCode = SysMgr.Instance.UserMgr.LoginUser.Code,
  483. CreateUserCode = SysMgr.Instance.UserMgr.LoginUser.Code,
  484. ProcessParams = processParams
  485. });
  486. reOrderProcess();
  487. this.refreshDataGridView();
  488. this.dataGridView2.Rows[liInsertIndex].Selected = true;
  489. dataGridView2.CurrentCell = dataGridView2.Rows[liInsertIndex].Cells[1];
  490. }
  491. catch (Exception ex)
  492. {
  493. MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
  494. }
  495. }
  496. private void btnDel_Click(object sender, EventArgs e)
  497. {
  498. try
  499. {
  500. if (this.dataGridView2.SelectedRows.Count != 1)
  501. throw new Exception("请选择要删除的工序!");
  502. int liRowIndex = this.dataGridView2.SelectedRows[0].Index;
  503. model.ProcessList.RemoveAt(liRowIndex);
  504. if (liRowIndex >= dataGridView2.Rows.Count - 1)
  505. liRowIndex = dataGridView2.Rows.Count - 1;
  506. if (liRowIndex < oldIndex)
  507. oldIndex--;
  508. else if (liRowIndex == oldIndex)
  509. {
  510. oldIndex = 0;
  511. oldProcessCode = "";
  512. }
  513. dataGridView2.CurrentCell = dataGridView2.Rows[liRowIndex].Cells[1];
  514. //reOrderProcess();
  515. this.refreshDataGridView();
  516. if (dataGridView2.Rows.Count < 1)
  517. return;
  518. if (liRowIndex >= dataGridView2.Rows.Count)
  519. liRowIndex = dataGridView2.Rows.Count - 1;
  520. dataGridView2.CurrentCell = dataGridView2.Rows[liRowIndex].Cells[1];
  521. }
  522. catch (Exception ex)
  523. {
  524. MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
  525. }
  526. }
  527. private void btnUp_Click(object sender, EventArgs e)
  528. {
  529. try
  530. {
  531. if (this.dataGridView2.SelectedRows.Count != 1)
  532. throw new Exception("请选择要调整顺序的工序!");
  533. int liSelIndex = this.dataGridView2.SelectedRows[0].Index;
  534. if (liSelIndex == 0)
  535. return;
  536. if(liSelIndex == oldIndex)
  537. oldIndex--;
  538. else if (liSelIndex == (oldIndex + 1))
  539. oldIndex++;
  540. model.ProcessList.Insert(liSelIndex - 1, model.ProcessList[liSelIndex]);
  541. model.ProcessList.RemoveAt(liSelIndex + 1);
  542. reOrderProcess();
  543. this.refreshDataGridView();
  544. this.dataGridView2.Rows[liSelIndex - 1].Selected = true;
  545. dataGridView2.CurrentCell = dataGridView2.Rows[liSelIndex - 1].Cells[1];
  546. }
  547. catch (Exception ex)
  548. {
  549. MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
  550. }
  551. }
  552. private void btnDown_Click(object sender, EventArgs e)
  553. {
  554. try
  555. {
  556. if (this.dataGridView2.SelectedRows.Count != 1)
  557. throw new Exception("请选择要调整顺序的工序!");
  558. int liSelIndex = this.dataGridView2.SelectedRows[0].Index;
  559. if (liSelIndex == this.dataGridView2.Rows.Count - 1)
  560. return;
  561. if (liSelIndex == oldIndex)
  562. oldIndex++;
  563. else if (liSelIndex == (oldIndex - 1))
  564. oldIndex--;
  565. model.ProcessList.Insert(liSelIndex + 2, model.ProcessList[liSelIndex]);
  566. model.ProcessList.RemoveAt(liSelIndex);
  567. reOrderProcess();
  568. this.refreshDataGridView();
  569. this.dataGridView2.Rows[liSelIndex + 1].Selected = true;
  570. dataGridView2.CurrentCell = dataGridView2.Rows[liSelIndex + 1].Cells[1];
  571. }
  572. catch (Exception ex)
  573. {
  574. MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
  575. }
  576. }
  577. #endregion
  578. private void refreshUI()
  579. {
  580. SyncContext.Post(m =>
  581. {
  582. var result = m as string;
  583. ProcessPropertyGrid.Refresh();
  584. //tbtnJogOnOff.Text = (prop.AxState == AxisState.STA_AX_EXT_JOG) ? "关闭Jog" : "开启Jog";
  585. //tbtnLeft.Enabled = tbtnRight.Enabled = (prop.AxState == AxisState.STA_AX_EXT_JOG);
  586. }, "异步操作完成结果");
  587. }
  588. private void ProcessPropertyGrid_PropertyValueChanged(object s, PropertyValueChangedEventArgs e)
  589. {
  590. //其中包含了两个重要的属性:OldValue和ChangeItem。
  591. //ChangeItem是“PropertyDescriptorGridEntry”类型。一般可以通过ChangeItem.PropertyDescriptor.ComponentType查找到属性的实际类型。
  592. //而通过ChangeItem的Label,则可以查看到当前在属性编辑输入框中显示的值。
  593. int Index = this.dataGridView2.CurrentRow.Index;//获取当前选中行的索引
  594. string className = e.ChangedItem.PropertyDescriptor.ComponentType.Name;
  595. string propertyName = e.ChangedItem.PropertyDescriptor.Name;
  596. var oldValue = e.OldValue;
  597. var newValue = e.ChangedItem.Value;
  598. switch (propertyName)
  599. {
  600. case "ChannelIndex":
  601. if ((int)newValue < 1 || (int)newValue > 6)
  602. {
  603. _ProcessLightProp.ChannelIndex = (int)oldValue;
  604. this.refreshUI();
  605. }
  606. else
  607. {
  608. //dev.getDigitalValue((int)newValue);
  609. }
  610. break;
  611. case "DigitalValue":
  612. if ((int)newValue < 0 || (int)newValue > 255)
  613. {
  614. _ProcessLightProp.DigitalValue = (int)oldValue;
  615. this.refreshUI();
  616. }
  617. break;
  618. //case "ThresholdsClass":
  619. // if (!IsNumber(newValue.ToString().Replace("-", "").Replace(",", "").Replace(";", "").Replace(".", "")))
  620. // txtLog.Text = "种类阀值只可输入数字!";
  621. // else if (!verifyThresholdsCount(newValue.ToString(), prop.ThresholdsClassCount))
  622. // txtLog.Text = "输入种类阀值与数量不一致!";
  623. // else
  624. // txtLog.Text = "";
  625. // break;
  626. //case "ThresholdsClassCount":
  627. // if (!verifyThresholdsCount(prop.ThresholdsClass, (int)newValue))
  628. // txtLog.Text = "输入种类阀值与数量不一致!";
  629. // else
  630. // txtLog.Text = "";
  631. // break;
  632. }
  633. switch (className)
  634. {
  635. case "TensionProp":
  636. this.dataGridView2.Rows[Index].Cells["colProcessParams"].Value = _ProcessTensionProp.serialize();
  637. break;
  638. case "ThicknessProp":
  639. this.dataGridView2.Rows[Index].Cells["colProcessParams"].Value = _ProcessThicknessProp.serialize();
  640. break;
  641. case "LensProp":
  642. this.dataGridView2.Rows[Index].Cells["colProcessParams"].Value = _ProcessLensProp.serialize();
  643. break;
  644. case "LightProp":
  645. this.dataGridView2.Rows[Index].Cells["colProcessParams"].Value = _ProcessLightProp.serialize();
  646. break;
  647. case "MarkProp":
  648. this.dataGridView2.Rows[Index].Cells["colProcessParams"].Value = _ProcessMarkProp.serialize();
  649. break;
  650. case "SizeDefectProp":
  651. this.dataGridView2.Rows[Index].Cells["colProcessParams"].Value = _ProcessSizeDefectProp.serialize();
  652. break;
  653. case "PointTestProp":
  654. this.dataGridView2.Rows[Index].Cells["colProcessParams"].Value = _ProcessPointTestProp.serialize();
  655. break;
  656. case "ForProp":
  657. this.dataGridView2.Rows[Index].Cells["colProcessParams"].Value = _ProcessForProp.serialize();
  658. break;
  659. }
  660. }
  661. private void ProcessPropertyGrid_SelectedObjectsChanged(object sender, EventArgs e)
  662. {
  663. }
  664. private void StepProcessFrm_FormClosed(object sender, FormClosedEventArgs e)
  665. {
  666. if (frm != null)
  667. frm.Close();
  668. }
  669. }
  670. }