版博士V2.0程序
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
 
 
 
 

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