OTSDisplaySampleGrid.cs 57 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264
  1. using OTSDataType;
  2. using OTSMeasureApp._3_OTSDisplaySourceGridData;
  3. using OTSModelSharp.ResourceManage;
  4. using SourceGrid;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.ComponentModel;
  8. using System.Drawing;
  9. using System.Linq;
  10. using System.Text.RegularExpressions;
  11. using System.Windows.Forms;
  12. namespace OTSMeasureApp
  13. {
  14. public class OTSDisplaySampleGrid
  15. {
  16. public OTSPropertyWindow m_PropWindow = null;
  17. int m_Grid_TotalRow = 0; // 显示样品信息的Grid的总行数
  18. //定义分栏表头样式
  19. SourceGrid.Cells.Views.Cell m_Col_HeaderMode = null;
  20. //定义大表头grid表头样式
  21. SourceGrid.Cells.Views.Cell m_CellTitleModel = null;
  22. //定义分栏标题格样式
  23. SourceGrid.Cells.Views.Cell m_Col_NameMode = null;
  24. //定义分栏内容格样式
  25. SourceGrid.Cells.Views.Cell m_Col_ValMode = null;
  26. //只读样式cell设置
  27. SourceGrid.Cells.Views.Cell M_Col_readonly = null;
  28. //响应CheckBOX的点击事件
  29. SelcetCheckBoxEvent m_SelectCheckBoxEvent = null;
  30. //当选择了Grid的某个row ,修改Row的值,引发的事件
  31. ChangeGridCellValEvent m_ChangeCellValEvent = null;
  32. //选择COMBOBOX值引发的事件
  33. SelectComboboxItem m_SeletComboboxValEvent = null;
  34. //EditFileDialog
  35. EditorFileDialog m_EditFileDlg = new EditorFileDialog();
  36. //CELL的第一例的 "-" 的事件
  37. SourceGrid.Cells.Controllers.Button m_linkClickEvent3 = null;
  38. //初始化ComboxTest
  39. //当Grid被Click时, 确定Click点击的行和列
  40. public int m_ClickRow = 0;
  41. public int m_ClickColumn = 0;
  42. //当改变ProperyWindow窗口大小时,窗口响应Resize(object sender, EventArgs e),返回改变后的尺寸,利用改变后的窗口尺寸重回Grid的行宽和列宽
  43. public int m_PropWindow_X = 0;
  44. public int m_PropWindow_Y = 0;
  45. // int Cur_Grid_Rows = 0; //临时用于计算用的grid行号
  46. public static int Const_Grid_Row = 48; //总行数
  47. public static int Const_Grid_Column = 3; //总列数
  48. MeasureStopMode StopModeDialog;
  49. //后台工作线程
  50. BackgroundWorker m_bgWorker = null;
  51. //后台工作线程启动标志,保证线程按顺序启动。
  52. public bool m_ReqChangeValFlag = true;
  53. //工作样品对象
  54. OTSSamplePropertyInfo m_WSampleInfo = new OTSSamplePropertyInfo();
  55. NLog.Logger log ;
  56. public OTSDisplaySampleGrid(OTSPropertyWindow Propwindow)
  57. {
  58. log = NLog.LogManager.GetCurrentClassLogger();
  59. m_PropWindow = Propwindow;
  60. m_PropWindow.PropGrid.Redim(Const_Grid_Row, Const_Grid_Column);
  61. m_PropWindow.TSEdit.Enabled = false;
  62. m_PropWindow.TSLoad.Enabled = false;
  63. m_PropWindow.TSSaveAs.Enabled = false;
  64. }
  65. //隐藏Grid
  66. public void HideGrid()
  67. {
  68. m_PropWindow.PropGrid.Hide();
  69. }
  70. //初始化Grid修改值事件
  71. void IntiChangeValEvent()
  72. {
  73. m_ChangeCellValEvent = new ChangeGridCellValEvent(this);
  74. m_SeletComboboxValEvent = new SelectComboboxItem(this);
  75. m_SelectCheckBoxEvent = new SelcetCheckBoxEvent(this);
  76. //CELL的第一例的 "-" 的事件,响应点击事件
  77. m_linkClickEvent3 = new SourceGrid.Cells.Controllers.Button();
  78. m_linkClickEvent3.Executed += new EventHandler(CellLink_Click_Status);
  79. }
  80. /// <summary>
  81. /// 帧结束方式事件
  82. /// </summary>
  83. /// <param name="sender"></param>
  84. /// <param name="e"></param>
  85. private void clickEvent_Click(object sender, EventArgs e)
  86. {
  87. SourceGrid.CellContext context = (SourceGrid.CellContext)sender;
  88. int i = context.Position.Row;
  89. int j = context.Position.Column;
  90. /// 保证鼠标点击的GRID行和列是有效的
  91. if (i >= 0 && j >= 0)
  92. {
  93. if(StopModeDialog==null)
  94. {
  95. StopModeDialog = new MeasureStopMode();
  96. }
  97. DialogResult result = StopModeDialog.ShowDialog();
  98. if (result == DialogResult.OK)
  99. {
  100. string[] rst= StopModeDialog.StopMode.Split(',');
  101. m_PropWindow.PropGrid[i, j].Value = "";
  102. for (int k=0;k< rst.Length;k++)
  103. {
  104. m_PropWindow.PropGrid[i, j].Value += rst[k].Split(':')[0] + " + ";
  105. }
  106. m_PropWindow.PropGrid[i, j].Value = m_PropWindow.PropGrid[i, j].Value.ToString().Substring(0, m_PropWindow.PropGrid[i, j].Value.ToString().Length-3);
  107. //m_SampleGrid.m_PropWindow.SampleGridInfoChange((OTS_SAMPLE_PROP_GRID_ITEMS)SampleId, ValType, objVal);
  108. }
  109. }
  110. m_PropWindow.PropGrid.Refresh();
  111. }
  112. //初始化工作线程
  113. private void InitWorkThread()
  114. {
  115. using (m_bgWorker = new BackgroundWorker())
  116. {
  117. m_bgWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
  118. m_bgWorker.DoWork += new DoWorkEventHandler(bw_DoWork);
  119. }
  120. }
  121. //初始化Grid的标题
  122. public void InitGridTitlet()
  123. {
  124. // InitGrid();
  125. int firstColumnWidth = 15; //第一列的宽度
  126. int SecondColumnWidth = 180;
  127. //设备各单元格宽度---------------------------------------------
  128. m_PropWindow.PropGrid.Columns.SetWidth(0, firstColumnWidth); //设置第一列宽度
  129. m_PropWindow.PropGrid.Columns.AutoSizeColumn(2); //固定进度条
  130. //ProperyWindows的窗口宽度包括是第二列和第三列的长度总和
  131. m_PropWindow.PropGrid.Columns.SetWidth(1, 180); //第二列宽度
  132. m_PropWindow.PropGrid.Columns.SetWidth(2, (m_PropWindow_X - firstColumnWidth- SecondColumnWidth - 10)); //第三列宽度
  133. }
  134. public void InitGrid()
  135. {
  136. IntiChangeValEvent();
  137. //定义大表头grid表头样式
  138. {
  139. m_CellTitleModel = new SourceGrid.Cells.Views.Cell();
  140. m_CellTitleModel.BackColor = Color.LightGray;
  141. m_CellTitleModel.ForeColor = Color.Black;
  142. m_CellTitleModel.TextAlignment = DevAge.Drawing.ContentAlignment.TopLeft;
  143. }
  144. //定义分栏表头样式
  145. {
  146. m_Col_HeaderMode = new SourceGrid.Cells.Views.Cell();
  147. m_Col_HeaderMode.BackColor = Color.LightGray; //背景色
  148. m_Col_HeaderMode.ForeColor = Color.Black; //字体颜色
  149. m_Col_HeaderMode.TextAlignment = DevAge.Drawing.ContentAlignment.MiddleCenter;
  150. }
  151. //定义分栏标题格样式
  152. {
  153. m_Col_NameMode = new SourceGrid.Cells.Views.Cell();
  154. m_Col_NameMode.TextAlignment = DevAge.Drawing.ContentAlignment.MiddleLeft;
  155. }
  156. //定义分栏内容格样式
  157. {
  158. m_Col_ValMode = new SourceGrid.Cells.Views.Cell();
  159. m_Col_ValMode.TextAlignment = DevAge.Drawing.ContentAlignment.MiddleLeft;
  160. }
  161. //只读样式cell设置
  162. {
  163. M_Col_readonly = new SourceGrid.Cells.Views.Cell();
  164. M_Col_readonly.ForeColor = Color.Gray;
  165. }
  166. }
  167. public void ShowSampleInfoGrid(OTSSamplePropertyInfo SampleInfo)
  168. {
  169. if(SampleInfo.SampleDataList.Count() == 0)
  170. {
  171. return;
  172. }
  173. m_Grid_TotalRow = 0;
  174. var grps = SampleInfo.GetSampleDataGroups();
  175. foreach (var grp in grps)
  176. {
  177. this.InitGroupTitle(m_Grid_TotalRow, grp);
  178. m_Grid_TotalRow++;
  179. //设置样品Grid数据
  180. for (int i = 0; i < grp.SampleDataList.Count ; i++)
  181. {
  182. //显示样品的属性值
  183. SamplePropertyData SData = grp.SampleDataList[i];
  184. this.SetGridCellVal(m_Grid_TotalRow, SData);
  185. m_Grid_TotalRow++;
  186. }
  187. }
  188. }
  189. //初始化组的标题栏 iRow:GroupTitle的行号, sGroupName: GroupTitle的名字
  190. private void InitGroupTitle(int iRow,SamplePropertyDataGroup grp)
  191. {
  192. String sGroupName=grp.sTitle ;
  193. if (null == m_PropWindow.PropGrid[iRow, 0])
  194. {
  195. m_PropWindow.PropGrid[iRow, 0] = new SourceGrid.Cells.Link("-");//第一行,上面用来折叠的"-",一会点击后变成"+"
  196. m_PropWindow.PropGrid[iRow, 0].View = m_CellTitleModel; //设置表头的样式
  197. //设置表头"-"按钮,点击后的事件
  198. SourceGrid.Cells.Controllers.Button linkClickEvent3 = new SourceGrid.Cells.Controllers.Button();
  199. linkClickEvent3.Executed += new EventHandler(CellLink_Click_Status);
  200. m_PropWindow.PropGrid[iRow, 0].Controller.AddController(linkClickEvent3);
  201. m_PropWindow.PropGrid[iRow, 0].RowSpan = grp.SampleDataList.Count+1;
  202. }
  203. if(null == m_PropWindow.PropGrid[iRow, 1])
  204. {
  205. m_PropWindow.PropGrid[iRow, 1] = new SourceGrid.Cells.Cell(sGroupName); // 设置GroupTitle的名字
  206. m_PropWindow.PropGrid[iRow, 1].View = m_CellTitleModel;
  207. m_PropWindow.PropGrid[iRow, 1].ColumnSpan = 2; //设置第二列与第三列合并,表头效果完成。 2:从当前列开始合并2列
  208. }
  209. }
  210. private void SetGridCellVal(int Row, SamplePropertyData SData )
  211. {
  212. OTS_SAMPLE_PROP_GRID_ITEMS SampleID = SData.iSampleId;
  213. String sCaptionName = SData.sSCaptionName;
  214. object SampleVal = SData.SampleVal;
  215. List<String> comboDownList = SData.comboDownList;
  216. OTS_ITEM_TYPES SampleValType = SData.iSampleValType;
  217. bool bReadOnly = SData.bReadOnly;
  218. switch (SampleValType)
  219. {
  220. case OTS_ITEM_TYPES.TIME:
  221. case OTS_ITEM_TYPES.TIME_SPAN:
  222. case OTS_ITEM_TYPES.STRING:
  223. {
  224. if(OTS_ITEM_TYPES.TIME== SampleValType)
  225. {
  226. DateTime dt = DateTime.Parse ((String)SampleVal );
  227. SampleVal = dt.ToString();
  228. }
  229. if(OTS_ITEM_TYPES.TIME_SPAN== SampleValType)
  230. {
  231. TimeSpan TSpan = TimeSpan.FromSeconds(Convert .ToDouble( SampleVal));
  232. //这样就能得到天数、小时、分差
  233. string csTimeSpan = string.Empty;
  234. if (TSpan.Days > 0)
  235. {
  236. csTimeSpan += TSpan.Days + "天";
  237. }
  238. if (TSpan.Hours > 0)
  239. {
  240. csTimeSpan += TSpan.Hours + "小时";
  241. }
  242. if (TSpan.Minutes > 0)
  243. {
  244. csTimeSpan += TSpan.Minutes + "分";
  245. }
  246. if (TSpan.Seconds > 0)
  247. {
  248. csTimeSpan += TSpan.Seconds + "秒";
  249. }
  250. //所有时间换去 总计天数、小时、分钟
  251. SampleVal = csTimeSpan;
  252. }
  253. if (null == m_PropWindow.PropGrid[Row, 1])
  254. {
  255. m_PropWindow.PropGrid[Row, 1] = new SourceGrid.Cells.Cell(sCaptionName);
  256. }
  257. else
  258. {
  259. m_PropWindow.PropGrid[Row, 1].Value = sCaptionName;
  260. }
  261. if(SampleID == OTS_SAMPLE_PROP_GRID_ITEMS.STD_FILE_NAME)
  262. {
  263. // m_EditFileDlg
  264. if((null == m_PropWindow.PropGrid[Row, 2]) )
  265. {
  266. m_PropWindow.PropGrid[Row, 2] = new SourceGrid.Cells.Cell((String)SampleVal, m_EditFileDlg);
  267. }
  268. else
  269. {
  270. m_PropWindow.PropGrid[Row, 2].Value = (String)SampleVal;
  271. }
  272. //设置CELL 的显示模式
  273. m_PropWindow.PropGrid[Row, 1].View = m_Col_NameMode;
  274. m_PropWindow.PropGrid[Row, 2].View = m_Col_ValMode;
  275. if (bReadOnly) //只读模式
  276. {
  277. m_PropWindow.PropGrid[Row, 2].Editor = null;
  278. m_PropWindow.PropGrid[Row, 2].View = M_Col_readonly;// 设置只读
  279. }
  280. else
  281. { //设置允许修改值的事件
  282. m_PropWindow.PropGrid[Row, 2].AddController(m_ChangeCellValEvent);
  283. }
  284. if (bReadOnly) //只读模式
  285. {
  286. m_PropWindow.PropGrid[Row, 2].Editor = null;
  287. m_PropWindow.PropGrid[Row, 2].View = M_Col_readonly;// 设置只读
  288. }
  289. else
  290. { //设置允许修改值的事件
  291. m_PropWindow.PropGrid[Row, 2].AddController(m_ChangeCellValEvent);
  292. }
  293. }
  294. else if(SampleID == OTS_SAMPLE_PROP_GRID_ITEMS.STOP_MODE)
  295. {
  296. if (null == m_PropWindow.PropGrid[Row, 2])
  297. {
  298. m_PropWindow.PropGrid[Row, 2] = new SourceGrid.Cells.Cell(SampleVal, typeof(string));
  299. m_PropWindow.PropGrid[Row, 1].View = m_Col_NameMode;
  300. m_PropWindow.PropGrid[Row, 2].View = m_Col_ValMode;
  301. //SourceGrid.Cells.Controllers.CustomEvents clickEvent = new SourceGrid.Cells.Controllers.CustomEvents();
  302. //clickEvent.Click += new EventHandler(clickEvent_Click);
  303. if (bReadOnly) //只读模式
  304. {
  305. m_PropWindow.PropGrid[Row, 2].Editor = null;
  306. m_PropWindow.PropGrid[Row, 2].View = M_Col_readonly;// 设置只读
  307. m_PropWindow.PropGrid[Row, 2].AddController(m_ChangeCellValEvent);
  308. }
  309. else
  310. {
  311. //设置允许修改值的事件
  312. m_PropWindow.PropGrid[Row, 2].AddController(m_ChangeCellValEvent);
  313. }
  314. }
  315. else
  316. {
  317. m_PropWindow.PropGrid[Row, 2].Value = SampleVal;
  318. }
  319. }
  320. else
  321. {
  322. if (null == m_PropWindow.PropGrid[Row, 2])
  323. {
  324. m_PropWindow.PropGrid[Row, 2] = new SourceGrid.Cells.Cell(SampleVal, typeof(string));
  325. m_PropWindow.PropGrid[Row, 1].View = m_Col_NameMode;
  326. m_PropWindow.PropGrid[Row, 2].View = m_Col_ValMode;
  327. if (bReadOnly) //只读模式
  328. {
  329. m_PropWindow.PropGrid[Row, 2].Editor = null;
  330. m_PropWindow.PropGrid[Row, 2].View = M_Col_readonly;// 设置只读
  331. }
  332. else
  333. {
  334. //设置允许修改值的事件
  335. m_PropWindow.PropGrid[Row, 2].AddController(m_ChangeCellValEvent);
  336. }
  337. }
  338. else
  339. {
  340. m_PropWindow.PropGrid[Row, 2].Value = SampleVal;
  341. }
  342. }
  343. //将ID绑定到行号上,当在行上Click时,就可以查到对应的样品ID所在的行上的的值
  344. m_PropWindow.PropGrid.Rows[Row].Tag = SampleID;
  345. //将参数类型绑定到单元格上,当在行上Click时,就可以查到对应的参数类型所在的行上的的值
  346. m_PropWindow.PropGrid[Row,2].Tag = SampleValType;
  347. }
  348. break;
  349. case OTS_ITEM_TYPES.BOOL:
  350. {
  351. if(null == m_PropWindow.PropGrid[Row, 1])
  352. {
  353. m_PropWindow.PropGrid[Row, 1] = new SourceGrid.Cells.Cell(sCaptionName);
  354. }
  355. else
  356. {
  357. m_PropWindow.PropGrid[Row, 1].Value = sCaptionName;
  358. }
  359. if (SampleVal.ToString() == "")
  360. {
  361. SampleVal = 0;
  362. }
  363. bool bSwitch = Convert.ToInt32(SampleVal)==1?true:false;
  364. if (null == m_PropWindow.PropGrid[Row, 2])
  365. {
  366. m_PropWindow.PropGrid[Row, 2] = new SourceGrid.Cells.CheckBox(null, bSwitch);
  367. m_PropWindow.PropGrid[Row, 2].FindController<SourceGrid.Cells.Controllers.CheckBox>().CheckedChanged += m_SelectCheckBoxEvent.SetCheckBoxStatus(Row);
  368. m_PropWindow.PropGrid[Row, 1].View = m_Col_NameMode;
  369. }
  370. else
  371. {
  372. m_PropWindow.PropGrid[Row, 2].Value = bSwitch;
  373. }
  374. m_PropWindow.PropGrid.Rows[Row].Tag = SampleID;
  375. m_PropWindow.PropGrid[Row, 2].Tag = SampleValType;
  376. }
  377. break;
  378. case OTS_ITEM_TYPES.FILE_LIST:
  379. {
  380. //初始化 ComboxTest ,COMBBOX 显示文字使用
  381. SourceGrid.Cells.Editors.ComboBox m_ComboboxText = null;
  382. List<string> ValList = new List<string>();
  383. string[] arraySample;
  384. if (null == comboDownList)
  385. {
  386. List<string> sSampleVal = new List<string>();
  387. ValList = sSampleVal;
  388. }
  389. else
  390. {
  391. ValList = (List<string>)comboDownList;
  392. }
  393. int iValCount = ValList.Count();
  394. if (iValCount > 0)
  395. {
  396. arraySample = new string[iValCount];
  397. arraySample[0] = "";
  398. for (int i = 0; i < iValCount; i++)
  399. {
  400. arraySample[i] = ValList[i];
  401. }
  402. }
  403. else
  404. {
  405. arraySample = new string[3] { "", "", "" };
  406. }
  407. if (null == m_PropWindow.PropGrid[Row, 1])
  408. {
  409. m_PropWindow.PropGrid[Row, 1] = new SourceGrid.Cells.Cell(sCaptionName);
  410. }
  411. else
  412. {
  413. m_PropWindow.PropGrid[Row, 1].Value = sCaptionName;
  414. }
  415. //获取COMMBOX值的Index
  416. int iIndex = 0;
  417. List<string> FileNameList = new List<string>();
  418. if (OTS_SAMPLE_PROP_GRID_ITEMS.MEASURE_PARAM_FILE_NAME == SampleID)
  419. {
  420. //ref iIndex : 当文件名为空的时候返回 -1
  421. if (!m_PropWindow.m_MeasureAppForm.m_ProjParam.GetMeasureParamFileName(ref iIndex, ref FileNameList))
  422. {
  423. log.Error("(OTSDisplaySampleGrid.SetGridCellVal) m_PropWindow.m_MeasureAppForm.m_DataMgrFun.GetMeasureParamFileName(ref iIndex, ref FileNameList) = false ");
  424. iIndex = -1;
  425. }
  426. }
  427. if(OTS_SAMPLE_PROP_GRID_ITEMS.STD_FILE_NAME == SampleID)
  428. { //ref iIndex : 当文件名为空的时候返回 -1
  429. if (!m_PropWindow.m_MeasureAppForm.m_ProjParam.GetSTDFileName(ref iIndex, ref FileNameList))
  430. {
  431. log.Error("(OTSDisplaySampleGrid.SetGridCellVal) m_PropWindow.m_MeasureAppForm.m_DataMgrFun.GetSTDFileName(ref iIndex, ref FileNameList) = false ");
  432. iIndex = -1;
  433. }
  434. }
  435. if (null == m_PropWindow.PropGrid[Row, 2])
  436. {
  437. if(-1 == iIndex)
  438. {
  439. m_PropWindow.PropGrid[Row, 2] = new SourceGrid.Cells.Cell("");
  440. }
  441. else
  442. {
  443. m_PropWindow.PropGrid[Row, 2] = new SourceGrid.Cells.Cell(arraySample[iIndex]);
  444. }
  445. m_ComboboxText = new SourceGrid.Cells.Editors.ComboBox(typeof(string), arraySample, true);
  446. m_PropWindow.PropGrid[Row, 2].Editor = m_ComboboxText;
  447. m_ComboboxText.Control.DropDownStyle = ComboBoxStyle.DropDownList; //设置下拉框为不可以编辑的状态
  448. m_PropWindow.PropGrid[Row, 2].AddController(m_ChangeCellValEvent);
  449. m_PropWindow.PropGrid[Row, 1].View = m_Col_NameMode;
  450. m_PropWindow.PropGrid[Row, 2].View = m_Col_ValMode;
  451. }
  452. else
  453. {
  454. m_PropWindow.PropGrid[Row, 2].Value = arraySample[iIndex];
  455. }
  456. //将样品的ID绑定到行号上,当在行上Click时,就可以查到对应的样品ID所在的行上的的值
  457. m_PropWindow.PropGrid.Rows[Row].Tag = SampleID;
  458. m_PropWindow.PropGrid[Row, 2].Tag = SampleValType;
  459. }
  460. break;
  461. case OTS_ITEM_TYPES.COMBO:
  462. {
  463. //初始化 ComboxTest ,COMBBOX 显示文字使用
  464. SourceGrid.Cells.Editors.ComboBox m_ComboboxText = null;
  465. List<string> ValList = new List<string>();
  466. string[] arraySample;
  467. if(null == comboDownList )
  468. {
  469. List<string> sSampleVal = new List<string>();
  470. ValList = sSampleVal;
  471. }
  472. else
  473. {
  474. ValList = (List<string>)comboDownList ;
  475. }
  476. int iValCount = ValList.Count();
  477. if(iValCount>0)
  478. {
  479. arraySample = new string[iValCount];
  480. for(int i=0; i<iValCount; i++)
  481. {
  482. arraySample[i] = ValList[i];
  483. }
  484. }
  485. else
  486. {
  487. arraySample = new string[3] { "", "", "" };
  488. }
  489. if(null == m_PropWindow.PropGrid[Row, 1])
  490. {
  491. m_PropWindow.PropGrid[Row, 1] = new SourceGrid.Cells.Cell(sCaptionName);
  492. }
  493. else
  494. {
  495. m_PropWindow.PropGrid[Row, 1].Value = sCaptionName;
  496. }
  497. if (null == m_PropWindow.PropGrid[Row, 2])
  498. {
  499. try
  500. {
  501. m_PropWindow.PropGrid[Row, 2] = new SourceGrid.Cells.Cell(SampleVal);
  502. m_ComboboxText = new SourceGrid.Cells.Editors.ComboBox(typeof(string), arraySample, true);
  503. m_PropWindow.PropGrid[Row, 2].Editor = m_ComboboxText;
  504. m_ComboboxText.Control.DropDownStyle = ComboBoxStyle.DropDownList; //设置下拉框为不可以编辑的状态
  505. m_PropWindow.PropGrid[Row, 2].AddController(m_ChangeCellValEvent);
  506. m_PropWindow.PropGrid[Row, 1].View = m_Col_NameMode;
  507. m_PropWindow.PropGrid[Row, 2].View = m_Col_ValMode;
  508. m_ComboboxText.EditableMode = EditableMode.SingleClick;
  509. }
  510. catch (Exception)
  511. {
  512. }
  513. }
  514. else
  515. {
  516. m_PropWindow.PropGrid[Row, 2].Value = (string)SampleVal ;
  517. }
  518. //将样品的ID绑定到行号上,当在行上Click时,就可以查到对应的样品ID所在的行上的的值
  519. m_PropWindow.PropGrid.Rows[Row].Tag = SampleID;
  520. m_PropWindow.PropGrid[Row,2].Tag = SampleValType ;
  521. }
  522. break;
  523. case OTS_ITEM_TYPES.INT:
  524. {
  525. if(null == m_PropWindow.PropGrid[Row, 1])
  526. {
  527. m_PropWindow.PropGrid[Row, 1] = new SourceGrid.Cells.Cell(sCaptionName);
  528. m_PropWindow.PropGrid[Row, 1].View = m_Col_NameMode;
  529. }
  530. else
  531. {
  532. m_PropWindow.PropGrid[Row, 1].Value = sCaptionName;
  533. }
  534. if(null == m_PropWindow.PropGrid[Row, 2])
  535. {
  536. m_PropWindow.PropGrid[Row, 2] = new SourceGrid.Cells.Cell(SampleVal, typeof(int));
  537. m_PropWindow.PropGrid[Row, 2].View = m_Col_ValMode;
  538. m_PropWindow.PropGrid[Row, 2].AddController(m_ChangeCellValEvent);
  539. }
  540. else
  541. {
  542. m_PropWindow.PropGrid[Row, 2].Value = SampleVal;
  543. }
  544. if (bReadOnly) //只读模式
  545. {
  546. m_PropWindow.PropGrid[Row, 2].Editor = null;
  547. m_PropWindow.PropGrid[Row, 2].View = M_Col_readonly;// 设置只读
  548. }
  549. //将样品的ID绑定到行号上,当在行上Click时,就可以查到对应的样品ID所在的行上的的值
  550. m_PropWindow.PropGrid.Rows[Row].Tag = SampleID;
  551. m_PropWindow.PropGrid[Row, 2].Tag = SampleValType;
  552. }
  553. break;
  554. case OTS_ITEM_TYPES.DOUBLE:
  555. {
  556. if(null == m_PropWindow.PropGrid[Row, 1])
  557. {
  558. m_PropWindow.PropGrid[Row, 1] = new SourceGrid.Cells.Cell(sCaptionName);
  559. m_PropWindow.PropGrid[Row, 1].View = m_Col_NameMode;
  560. }
  561. else
  562. {
  563. m_PropWindow.PropGrid[Row, 1].Value = sCaptionName;
  564. }
  565. if(null == m_PropWindow.PropGrid[Row, 2])
  566. {
  567. m_PropWindow.PropGrid[Row, 2] = new SourceGrid.Cells.Cell(SampleVal, typeof(double));
  568. m_PropWindow.PropGrid[Row, 2].View = m_Col_ValMode;
  569. }
  570. else
  571. {
  572. m_PropWindow.PropGrid[Row, 2].Value = SampleVal;
  573. }
  574. if (bReadOnly) //只读模式
  575. {
  576. m_PropWindow.PropGrid[Row, 2].Editor = null;
  577. m_PropWindow.PropGrid[Row, 2].View = M_Col_readonly;// 设置只读
  578. }
  579. else
  580. { //设置允许修改值的事件
  581. m_PropWindow.PropGrid[Row, 2].AddController(m_ChangeCellValEvent);
  582. }
  583. //将样品的ID绑定到行号上,当在行上Click时,就可以查到对应的样品ID所在的行上的的值
  584. m_PropWindow.PropGrid.Rows[Row].Tag = SampleID;
  585. m_PropWindow.PropGrid[Row, 2].Tag = SampleValType;
  586. }
  587. break;
  588. default:
  589. break;
  590. }
  591. }
  592. //点击 Grid标题栏左边的 "-"或者"+" 实现隐藏和显示样品属性行
  593. private void ShowOrHideCellRow(string sLTitle,int LTitleRow,int StartRow, int EndRow)
  594. {
  595. if ("-" == sLTitle)
  596. {
  597. //隐藏
  598. for (int i = StartRow; i < EndRow; i++)
  599. {
  600. m_PropWindow.PropGrid.Rows.HideRow(i);
  601. }
  602. m_PropWindow.PropGrid[LTitleRow, 0].Value = "+";
  603. }
  604. else
  605. {
  606. //显示
  607. m_PropWindow.PropGrid[LTitleRow, 0].Value = "-";
  608. for (int i = StartRow; i < EndRow; i++)
  609. {
  610. m_PropWindow.PropGrid.Rows.ShowRow(i);
  611. }
  612. }
  613. }
  614. //响应 表头"-"按钮,点击后的事件
  615. //折叠显示grid信息使用
  616. private void CellLink_Click_Status(object sender, EventArgs e)
  617. {
  618. string sTitleName = (string)m_PropWindow.PropGrid[m_ClickRow, 1].Value;
  619. string sLinkTitle = m_PropWindow.PropGrid[m_ClickRow, 0].Value.ToString();
  620. int rowspan = m_PropWindow.PropGrid[m_ClickRow, 0].RowSpan;
  621. this.ShowOrHideCellRow(sLinkTitle, m_ClickRow, m_ClickRow + 1, m_ClickRow + rowspan );
  622. }
  623. //使Grid标题栏中的Edit ,Save ,SaveAs 三个框无效/有效
  624. //bStatus=True: 可用; bStatus=False: 不可用
  625. public void SetGridTitleStatus()
  626. {
  627. if (m_PropWindow.PropGrid.Rows[m_ClickRow].Tag != null) //需要判断每行的Tag 是否绑定sampleID
  628. {
  629. if (OTS_SAMPLE_PROP_GRID_ITEMS.MEASURE_PARAM_FILE_NAME == (OTS_SAMPLE_PROP_GRID_ITEMS)m_PropWindow.PropGrid.Rows[m_ClickRow].Tag)
  630. {
  631. m_PropWindow.TSEdit.Enabled = false;
  632. m_PropWindow.TSLoad.Enabled = true;
  633. m_PropWindow.TSSaveAs.Enabled = true;
  634. }
  635. else if (OTS_SAMPLE_PROP_GRID_ITEMS.STD_FILE_NAME == (OTS_SAMPLE_PROP_GRID_ITEMS)m_PropWindow.PropGrid.Rows[m_ClickRow].Tag)
  636. {
  637. m_PropWindow.TSEdit.Enabled = false;
  638. m_PropWindow.TSEdit.Visible = false;
  639. m_PropWindow.TSLoad.Enabled = true;
  640. m_PropWindow.TSSaveAs.Enabled = true;
  641. }
  642. else
  643. {
  644. m_PropWindow.TSEdit.Enabled = false;
  645. m_PropWindow.TSEdit.Visible = false;
  646. m_PropWindow.TSLoad.Enabled = true;
  647. m_PropWindow.TSSaveAs.Enabled = true;
  648. }
  649. }
  650. }
  651. /// <summary>
  652. /// 保存修改样品值
  653. /// </summary>
  654. struct sSampleid_Val
  655. {
  656. public OTS_SAMPLE_PROP_GRID_ITEMS SampleID;
  657. public object ObjVal;
  658. public bool bCheckBoxFlag; //bCheckBoxFlag: 当TREEVIEW的工作样品的CHECKBOS状态发生变化,bCheckBoxFlag=true;需要更新GRIDE上的SWITCH的值
  659. }
  660. /// <summary>
  661. /// MeasureAPP回复Gird修改值成功/失败
  662. /// bCheckBoxFlag: 当TREEVIEW的工作样品的CHECKBOS状态发生变化,bCheckBoxFlag=true;需要更新GRIDE上的SWITCH的值
  663. /// </summary>
  664. /// <param name="SampleID"></param>
  665. /// <param name="ObjVal"></param>
  666. /// <param name="bCheckBoxFlag"></param>
  667. public void UpdataNewGridVal(OTS_SAMPLE_PROP_GRID_ITEMS SampleID, object ObjVal, bool bCheckBoxFlag=false)
  668. {
  669. //log.Trace("******** UpdataNewGridVal ************");
  670. sSampleid_Val sval = new sSampleid_Val();
  671. sval.SampleID = SampleID;
  672. sval.ObjVal = ObjVal;
  673. sval.bCheckBoxFlag = bCheckBoxFlag;
  674. if (m_bgWorker != null)
  675. {
  676. if (!m_bgWorker.IsBusy)
  677. {
  678. m_ReqChangeValFlag = false;
  679. //log.Trace("******** Start run WorkThread ************");
  680. m_bgWorker.RunWorkerAsync(sval);
  681. }
  682. }
  683. //log.Trace("Exit UpdataNewGridVal");
  684. }
  685. void bw_DoWork(object sender, DoWorkEventArgs e)
  686. {
  687. // 这里是后台线程, 是在另一个线程上完成的
  688. // 这里是真正做事的工作线程
  689. // 可以在这里做一些费时的,复杂的操作
  690. sSampleid_Val sVal = (sSampleid_Val)e.Argument;
  691. string str = sVal.SampleID.ToString();
  692. string sLine = m_ClickRow.ToString();
  693. str += " != Switch" + " ClickLine = " + sLine;
  694. if (sVal.SampleID != OTS_SAMPLE_PROP_GRID_ITEMS.SWITCH)
  695. {
  696. if ((OTS_SAMPLE_PROP_GRID_ITEMS)m_PropWindow.PropGrid.Rows[m_ClickRow].Tag == sVal.SampleID)
  697. {
  698. m_PropWindow.PropGrid[m_ClickRow, m_ClickColumn].Value = sVal.ObjVal;
  699. log.Trace(" Set Value ");
  700. log.Trace(str);
  701. }
  702. }
  703. else
  704. {
  705. if (sVal.bCheckBoxFlag)
  706. {
  707. for(int i=0; i<m_Grid_TotalRow; i++)
  708. {
  709. if(null == m_PropWindow.PropGrid[i, 2].Tag)
  710. {
  711. continue;
  712. }
  713. if (((int)m_PropWindow.PropGrid[i, 2].Tag == i) && ((OTS_SAMPLE_PROP_GRID_ITEMS)m_PropWindow.PropGrid.Rows[i].Tag == OTS_SAMPLE_PROP_GRID_ITEMS.SWITCH))
  714. {
  715. m_PropWindow.PropGrid[i, 2].FindController<SourceGrid.Cells.Controllers.CheckBox>().CheckedChanged -= m_SelectCheckBoxEvent.SetCheckBoxStatus(i);
  716. bool bFlag = m_PropWindow.PropGrid.ContainsFocus;
  717. m_PropWindow.PropGrid[i, 2].Value = sVal.ObjVal;
  718. m_PropWindow.PropGrid[i, 2].FindController<SourceGrid.Cells.Controllers.CheckBox>().CheckedChanged += m_SelectCheckBoxEvent.SetCheckBoxStatus(i);
  719. break;
  720. }
  721. }
  722. }
  723. else
  724. {
  725. m_PropWindow.PropGrid[m_ClickRow, 2].FindController<SourceGrid.Cells.Controllers.CheckBox>().CheckedChanged -= m_SelectCheckBoxEvent.SetCheckBoxStatus(m_ClickRow);
  726. m_PropWindow.PropGrid[m_ClickRow, m_ClickColumn].Value = sVal.ObjVal;
  727. m_PropWindow.PropGrid[m_ClickRow, 2].FindController<SourceGrid.Cells.Controllers.CheckBox>().CheckedChanged += m_SelectCheckBoxEvent.SetCheckBoxStatus(m_ClickRow);
  728. }
  729. log.Trace(str);
  730. }
  731. object val = m_PropWindow.PropGrid[m_ClickRow, 2].Value;
  732. }
  733. void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
  734. {
  735. //这时后台线程已经完成,并返回了主线程,所以可以直接使用UI控件了
  736. object val = m_PropWindow.PropGrid[m_ClickRow, 2].Value;
  737. log.Trace("Exit WorkThread");
  738. m_ReqChangeValFlag = true;
  739. m_PropWindow.PropGrid.Refresh();
  740. }
  741. public OTS_ITEM_TYPES GetWSampleValType(OTS_SAMPLE_PROP_GRID_ITEMS ItemId)
  742. {
  743. OTS_ITEM_TYPES ValType = OTS_ITEM_TYPES.BOOL;
  744. int iSValCount = m_WSampleInfo.SampleDataList.Count();
  745. for(int i=0; i<iSValCount; i++ )
  746. {
  747. if(ItemId == m_WSampleInfo.SampleDataList[i].iSampleId)
  748. {
  749. ValType = m_WSampleInfo.SampleDataList[i].iSampleValType;
  750. break;
  751. }
  752. }
  753. return ValType;
  754. }
  755. }
  756. //当选择了Grid的某个row ,修改Row的值,引发的事件
  757. class ChangeGridCellValEvent : SourceGrid.Cells.Controllers.ControllerBase
  758. {
  759. OTSDisplaySampleGrid m_SampleGrid = null;
  760. public ChangeGridCellValEvent(OTSDisplaySampleGrid SGrid)
  761. {
  762. m_SampleGrid = SGrid;
  763. }
  764. public override void OnValueChanged(SourceGrid.CellContext sender, EventArgs e)
  765. {
  766. string str = sender.Value.ToString();
  767. //校验输入进的值是否符合输入标准,根据str输入的值,
  768. //OTS_ITEM_TYPES是什么类型的框,该框在m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 2].Tag上进行的绑定
  769. if (Verify(str, (OTS_SAMPLE_PROP_GRID_ITEMS)m_SampleGrid.m_PropWindow.PropGrid.Rows[m_SampleGrid.m_ClickRow].Tag,
  770. (OTS_ITEM_TYPES)m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 2].Tag) == false)
  771. {
  772. return;
  773. }
  774. base.OnValueChanged(sender, e);
  775. if (m_SampleGrid.m_PropWindow.PropGrid.Rows[m_SampleGrid.m_ClickRow].Tag != null) //需要判断每行的Tag 是否绑定sampleID
  776. {
  777. OTS_SAMPLE_PROP_GRID_ITEMS SampleId = (OTS_SAMPLE_PROP_GRID_ITEMS)m_SampleGrid.m_PropWindow.PropGrid.Rows[m_SampleGrid.m_ClickRow].Tag;
  778. String sName = (string)m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 1].Value;
  779. object objVal = m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 2].Value;
  780. if(m_SampleGrid.m_ReqChangeValFlag)
  781. {
  782. OTS_ITEM_TYPES ValType = (OTS_ITEM_TYPES)m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 2].Tag;
  783. if (ValType == OTS_ITEM_TYPES.COMBO || ValType == OTS_ITEM_TYPES.FILE_LIST)
  784. {
  785. objVal= m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 2].Editor.StandardValuesIndexOf(objVal);
  786. }
  787. m_SampleGrid.m_PropWindow.SampleGridInfoChange((OTS_SAMPLE_PROP_GRID_ITEMS)SampleId, ValType, objVal);
  788. }
  789. }
  790. }
  791. /// <summary>
  792. /// 对属性窗体中各项,输入的值类型进行校验
  793. /// </summary>
  794. /// <param name="in_str"></param>
  795. /// <param name="sampleitem"></param>
  796. /// <param name="ValType"></param>
  797. /// <returns></returns>
  798. public bool Verify(string in_str, OTS_SAMPLE_PROP_GRID_ITEMS sampleitem, OTS_ITEM_TYPES ValType)
  799. {
  800. //Regex rg_szzmxhx = new Regex(@"^\w+$"); //由数字、26个英文字母或者下划线组成的字符串
  801. Regex rg_szzmxhx = new Regex(@"^.{1,20}$");
  802. Regex rg_zzs_hl = new Regex(@"^\d+$"); //正整数含0
  803. Regex rg_zzs_bhl = new Regex(@"^\+?[1-9][0-9]*$"); //正整数不含0
  804. Regex rg_fds_bhl = new Regex(@"^(0|[1-9]+[0-9]*)(\.[0-9]{1,4})?$"); //正浮点数含0,需要和判断0配合使用
  805. if (in_str.Trim() == "")
  806. {
  807. return false;
  808. }
  809. switch (sampleitem)
  810. {
  811. case OTS_SAMPLE_PROP_GRID_ITEMS.SAMPLE_NAME: //样品名(数字、26个英文字母或者下划线)
  812. if (false == rg_szzmxhx.Match(in_str.Trim()).Success)
  813. {
  814. m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 2].Value = "Sample";
  815. MessageBox.Show("The length of sample name should not be greater than 20, please re-enter!", "Error Tip", MessageBoxButtons.OK, MessageBoxIcon.Information);
  816. return false;
  817. }
  818. break;
  819. case OTS_SAMPLE_PROP_GRID_ITEMS.STOP_PARAM_PARTICLE: //颗粒数(正整数,不含0)
  820. if (false == rg_zzs_bhl.Match(in_str.Trim()).Success)
  821. {
  822. m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 2].Value = "100";
  823. MessageBox.Show("The particle number of sample is wrong, please input again!", "Error Tip", MessageBoxButtons.OK, MessageBoxIcon.Information);
  824. return false;
  825. }
  826. break;
  827. case OTS_SAMPLE_PROP_GRID_ITEMS.STOP_PARAM_FIELD: //帧图数(正整数,不含0)
  828. if (false == rg_zzs_bhl.Match(in_str.Trim()).Success)
  829. {
  830. m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 2].Value = "100";
  831. MessageBox.Show("The number of frame is wrong, please input again!", "Error Tip", MessageBoxButtons.OK, MessageBoxIcon.Information);
  832. return false;
  833. }
  834. break;
  835. case OTS_SAMPLE_PROP_GRID_ITEMS.STOP_PARAM_TIME: //测量时间,秒(正整数,不含0)
  836. if (false == rg_zzs_bhl.Match(in_str.Trim()).Success)
  837. {
  838. m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 2].Value = "100";
  839. MessageBox.Show("The measurement time of sample is wrong, please input again!", "Error Tip", MessageBoxButtons.OK, MessageBoxIcon.Information);
  840. return false;
  841. }
  842. break;
  843. case OTS_SAMPLE_PROP_GRID_ITEMS.PARTICLE_AREA_MIN: //颗粒直径最小值(正浮点数,不含0)
  844. if (in_str.Trim() == "0")
  845. {
  846. m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 2].Value = "5.00";
  847. MessageBox.Show("The minimum particle diameter of the sample is wrong, please re-enter!", "Error Tip", MessageBoxButtons.OK, MessageBoxIcon.Information);
  848. return false;
  849. }
  850. if (false == rg_fds_bhl.Match(in_str.Trim()).Success)
  851. {
  852. m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 2].Value = "5.00";
  853. MessageBox.Show("The minimum particle diameter of the sample is wrong, please re-enter!", "Error Tip", MessageBoxButtons.OK, MessageBoxIcon.Information);
  854. return false;
  855. }
  856. break;
  857. case OTS_SAMPLE_PROP_GRID_ITEMS.PARTICLE_AREA_MAX: //颗粒直径最大值(正浮点数,不含0)
  858. if (in_str.Trim() == "0")
  859. {
  860. m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 2].Value = "100.00";
  861. MessageBox.Show("The maximum particle diameter of sample is wrong, please input again!", "Error Tip", MessageBoxButtons.OK, MessageBoxIcon.Information);
  862. return false;
  863. }
  864. if (false == rg_fds_bhl.Match(in_str.Trim()).Success)
  865. {
  866. m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 2].Value = "100.00";
  867. MessageBox.Show("The maximum particle diameter of sample is wrong, please input again!", "Error Tip", MessageBoxButtons.OK, MessageBoxIcon.Information);
  868. return false;
  869. }
  870. break;
  871. case OTS_SAMPLE_PROP_GRID_ITEMS.BG_GRAY_MIN: //背景灰度最小值(正整数,含0)
  872. if (false == rg_zzs_hl.Match(in_str.Trim()).Success)
  873. {
  874. m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 2].Value = "146";
  875. MessageBox.Show("The minimum background gray value of the sample is wrong, please re-enter!", "Error Tip", MessageBoxButtons.OK, MessageBoxIcon.Information);
  876. return false;
  877. }
  878. break;
  879. case OTS_SAMPLE_PROP_GRID_ITEMS.BG_GRAY_MAX: //背景灰度最大值(正整数,含0)
  880. if (false == rg_zzs_hl.Match(in_str.Trim()).Success)
  881. {
  882. m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 2].Value = "255";
  883. MessageBox.Show("The maximum background gray value of the sample is wrong, please re-enter!", "Error Tip", MessageBoxButtons.OK, MessageBoxIcon.Information);
  884. return false;
  885. }
  886. break;
  887. case OTS_SAMPLE_PROP_GRID_ITEMS.PARTICLE_GRAY_MIN: //颗粒灰度最小值(正整数,含0)
  888. if (false == rg_zzs_hl.Match(in_str.Trim()).Success)
  889. {
  890. m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 2].Value = "0";
  891. MessageBox.Show("The minimum gray value of the sample is wrong, please re-enter!", "Error Tip", MessageBoxButtons.OK, MessageBoxIcon.Information);
  892. return false;
  893. }
  894. break;
  895. case OTS_SAMPLE_PROP_GRID_ITEMS.PARTICLE_GRAY_MAX: //颗粒灰度最大值(正整数,含0)
  896. if (false == rg_zzs_hl.Match(in_str.Trim()).Success)
  897. {
  898. m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 2].Value = "145";
  899. MessageBox.Show("The maximum value of sample particle gray scale is wrong, please re-enter!", "Error Tip", MessageBoxButtons.OK, MessageBoxIcon.Information);
  900. return false;
  901. }
  902. break;
  903. case OTS_SAMPLE_PROP_GRID_ITEMS.ANALYSIS_RESOLUTION: //分析x-ray时间,计数率(正整数,不含0)
  904. if (false == rg_zzs_bhl.Match(in_str.Trim()).Success)
  905. {
  906. m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 2].Value = "1000";
  907. MessageBox.Show("The analysis x-ray time of the sample is wrong, please re-enter!", "Error Tip", MessageBoxButtons.OK, MessageBoxIcon.Information);
  908. return false;
  909. }
  910. break;
  911. case OTS_SAMPLE_PROP_GRID_ITEMS.ANALYSIS_COUNTS: //期望计数率(正整数,不含0)
  912. if (false == rg_zzs_bhl.Match(in_str.Trim()).Success)
  913. {
  914. m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 2].Value = "1000";
  915. MessageBox.Show("The expected count rate of the sample is wrong, please re-enter!", "Error Tip", MessageBoxButtons.OK, MessageBoxIcon.Information);
  916. return false;
  917. }
  918. break;
  919. case OTS_SAMPLE_PROP_GRID_ITEMS.MAGNIFICATION: //放大倍数(正整数,不含0)
  920. if (false == rg_zzs_bhl.Match(in_str.Trim()).Success)
  921. {
  922. m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 2].Value = "100";
  923. MessageBox.Show("The magnification of sample is wrong, please input again!", "Error Tip", MessageBoxButtons.OK, MessageBoxIcon.Information);
  924. return false;
  925. }
  926. if (Convert.ToInt32(in_str.Trim()) < 45)
  927. {
  928. m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 2].Value = "45";
  929. MessageBox.Show("The magnification of the sample is too small, please re-enter!", "Error Tip", MessageBoxButtons.OK, MessageBoxIcon.Information);
  930. return false;
  931. }
  932. break;
  933. case OTS_SAMPLE_PROP_GRID_ITEMS.PIXEL_SIZE: //像素尺寸(微米)(正浮点数,不含0)
  934. if (in_str.Trim() == "0") return false;
  935. if (false == rg_fds_bhl.Match(in_str.Trim()).Success)
  936. {
  937. m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 2].Value = "2";
  938. MessageBox.Show("The pixel size of the sample is wrong, please re-enter!", "Error Tip", MessageBoxButtons.OK, MessageBoxIcon.Information);
  939. return false;
  940. }
  941. break;
  942. case OTS_SAMPLE_PROP_GRID_ITEMS.TOTAL_FIELDS: //覆盖测量区域帧图数(正整数,不含0)
  943. if (false == rg_zzs_bhl.Match(in_str.Trim()).Success)
  944. {
  945. m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 2].Value = "100";
  946. MessageBox.Show("The number of frames in the coverage measurement area of the sample is wrong, please re-enter!", "Error Tip", MessageBoxButtons.OK, MessageBoxIcon.Information);
  947. return false;
  948. }
  949. break;
  950. case OTS_SAMPLE_PROP_GRID_ITEMS.COMPLETED_FIELDS: //完成帧图数(正整数,不含0)
  951. if (false == rg_zzs_bhl.Match(in_str.Trim()).Success)
  952. {
  953. m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 2].Value = "100";
  954. MessageBox.Show("The number of completed frames of the sample is wrong, please re-enter!", "Error Tip", MessageBoxButtons.OK, MessageBoxIcon.Information);
  955. return false;
  956. }
  957. break;
  958. case OTS_SAMPLE_PROP_GRID_ITEMS.TOTAL_AREA: //检测面积(正整数,不含0)
  959. if (false == rg_fds_bhl.Match(in_str.Trim()).Success)
  960. {
  961. m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 2].Value = "100000";
  962. MessageBox.Show("The detection area of the sample is wrong, please re-enter!", "Error Tip", MessageBoxButtons.OK, MessageBoxIcon.Information);
  963. return false;
  964. }
  965. break;
  966. case OTS_SAMPLE_PROP_GRID_ITEMS.TOTAL_PARTICLE: //颗粒数(正整数,不含0)
  967. if (false == rg_zzs_bhl.Match(in_str.Trim()).Success)
  968. {
  969. m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 2].Value = "100";
  970. MessageBox.Show("The detection area of the sample is wrong, please re-enter!", "Error Tip", MessageBoxButtons.OK, MessageBoxIcon.Information);
  971. return false;
  972. }
  973. break;
  974. case OTS_SAMPLE_PROP_GRID_ITEMS.TOTAL_PARTICLE_AREA: //颗粒面积(正整数,不含0)
  975. if (false == rg_fds_bhl.Match(in_str.Trim()).Success)
  976. {
  977. m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 2].Value = "10000";
  978. MessageBox.Show("The particle area of the sample is wrong, please re-enter!", "Error Tip", MessageBoxButtons.OK, MessageBoxIcon.Information);
  979. return false;
  980. }
  981. break;
  982. default:
  983. break;
  984. }
  985. return true;
  986. }
  987. }
  988. //选择Combobox下拉框中的值引发事件函数
  989. class SelectComboboxItem : SourceGrid.Cells.Controllers.ControllerBase
  990. {
  991. OTSDisplaySampleGrid m_SampleGrid = null;
  992. public SelectComboboxItem(OTSDisplaySampleGrid SGrid)
  993. {
  994. m_SampleGrid = SGrid;
  995. }
  996. public override void OnValueChanged(SourceGrid.CellContext sender, EventArgs e)
  997. {
  998. string str = sender.Value.ToString();
  999. if (m_SampleGrid.m_PropWindow.PropGrid.Rows[m_SampleGrid.m_ClickRow].Tag != null) //需要判断每行的Tag 是否绑定sampleID
  1000. {
  1001. OTS_SAMPLE_PROP_GRID_ITEMS SampleId = (OTS_SAMPLE_PROP_GRID_ITEMS)m_SampleGrid.m_PropWindow.PropGrid.Rows[m_SampleGrid.m_ClickRow].Tag;
  1002. String sName = (string)m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 1].Value;
  1003. object objVal = m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 2].Value;
  1004. }
  1005. }
  1006. }
  1007. class SelectGridCellColor : SourceGrid.Cells.Controllers.ControllerBase
  1008. {
  1009. public SelectGridCellColor()
  1010. {
  1011. }
  1012. public override void OnValueChanged(CellContext sender, EventArgs e)
  1013. {
  1014. base.OnValueChanged(sender, e);
  1015. sender.Grid.BackColor = (Color)sender.Value;
  1016. }
  1017. }
  1018. class EditorFileDialog : SourceGrid.Cells.Editors.TextBoxButton
  1019. {
  1020. public EditorFileDialog()
  1021. : base(typeof(string))
  1022. {
  1023. Control.DialogOpen += new EventHandler(Control_DialogOpen);
  1024. }
  1025. void Control_DialogOpen(object sender, EventArgs e)
  1026. {
  1027. using (OpenFileDialog dg = new OpenFileDialog())
  1028. {
  1029. dg.FileName = (string)Control.Value;
  1030. if (dg.ShowDialog(EditCellContext.Grid) == DialogResult.OK)
  1031. {
  1032. Control.Value = dg.FileName;
  1033. //MessageBox.Show(dg.FileName);
  1034. }
  1035. }
  1036. }
  1037. }
  1038. class SelcetCheckBoxEvent
  1039. {
  1040. OTSDisplaySampleGrid m_Grid;
  1041. public SelcetCheckBoxEvent(OTSDisplaySampleGrid grid)
  1042. {
  1043. m_Grid = grid;
  1044. }
  1045. public EventHandler SetCheckBoxStatus(int row)
  1046. {
  1047. return delegate
  1048. {
  1049. if (m_Grid.m_PropWindow.PropGrid.Rows[m_Grid.m_ClickRow].Tag != null) //需要判断每行的Tag 是否绑定sampleID
  1050. {
  1051. OTS_SAMPLE_PROP_GRID_ITEMS SampleId = (OTS_SAMPLE_PROP_GRID_ITEMS)m_Grid.m_PropWindow.PropGrid.Rows[m_Grid.m_ClickRow].Tag;
  1052. String sName = (string)m_Grid.m_PropWindow.PropGrid[m_Grid.m_ClickRow, 1].Value;
  1053. object objVal = m_Grid.m_PropWindow.PropGrid[m_Grid.m_ClickRow, 2].Value;
  1054. m_Grid.m_PropWindow.SampleGridInfoChange((OTS_SAMPLE_PROP_GRID_ITEMS)SampleId, OTS_ITEM_TYPES.BOOL, objVal);
  1055. }
  1056. };
  1057. }
  1058. }
  1059. }