版博士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.
 
 
 
 

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