版博士V2.0程序
No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.
 
 
 
 

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