frmReportApp.cs 46 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229
  1. using CefSharp;
  2. using CefSharp.WinForms;
  3. using OTS.WinFormsUI.Docking;
  4. using OTSCommon.Model;
  5. using OTSIncAReportApp.OTSDataMgrFunction;
  6. using OTSIncAReportApp.OTSRibbon;
  7. using OTSIncAReportApp.OTSSampleReportInfo;
  8. using OTSIncAReportApp.SysMgrTools;
  9. using OTSIncAReportGraph;
  10. using OTSIncAReportGraph.OTSIncAReportGraphFuncation;
  11. using OTSIncAReprotCharts;
  12. using System;
  13. using System.Collections;
  14. using System.Collections.Generic;
  15. using System.Data;
  16. using System.Diagnostics;
  17. using System.Drawing;
  18. using System.IO;
  19. using System.Runtime.InteropServices;
  20. using System.Windows.Forms;
  21. namespace OTSIncAReportApp
  22. {
  23. public struct PostLogMsg
  24. {
  25. public int logLevel;//1 trace 2 debug 3info 4 warn 5 error 6 fatal
  26. [MarshalAs(UnmanagedType.ByValArray, SizeConst = (int)200)]
  27. public char[] logMessage;
  28. };
  29. /// <summary>
  30. /// 报告主窗体类
  31. /// </summary>
  32. public partial class frmReportApp : Form
  33. {
  34. #region 共享窗体对象--------------------------------------------------------------------------------------
  35. public frmMeasureRstMgr m_RstWindow = null; //测量结果,树控件窗体,属性Grid窗体
  36. public frmReportConditionChoose m_conditionChoose = null; //属性Grid窗体
  37. public frmSampleImage m_SImageWindow = null; //BSE窗体
  38. public frmCharts m_ChartsWindow = null; //图表窗体
  39. public frmTables m_TablesWindow = null; //报表窗体
  40. public frmReportSysConfig m_ReportSysConfigForm; //配置参数窗体
  41. ResultFile resultFile = null;
  42. OTSImageDisHelp m_ReportFun = null;
  43. public OTSImageDisHelp ReportFun { get => m_ReportFun; set => m_ReportFun = value; }
  44. #endregion //-----------------------------------------------------------------------------------------------
  45. #region 报告类结构相关------------------------------------------------------------------------------------
  46. NLog.Logger log;
  47. private PostLogMsg m_LogMsg;
  48. public const int MsgID = 0x0464;
  49. public const int LogMsgID = 0x0465;
  50. public OutputNlog m_OutputNlog; //日志类对象
  51. public ResultDataMgr m_rstDataMgr = null; //DataMgrFun 对象, 此类是和调用C++ DataMGR交互数据
  52. public OTSRibbonFun m_RibbonFun = null; //报告菜单相关操作类
  53. public string m_OTSReportMgrParamFile = ResultDataMgr.m_ReportMgrParamFile; //报告对应使用的参数文件名
  54. //测量结果ID
  55. //当前工作结果
  56. public static Dictionary<Guid, DisplayParticle> selectedParticles = new Dictionary<Guid, DisplayParticle>(); //所有选择颗粒
  57. public static RectangleF selectedRegion = new RectangleF();
  58. public string MoreSource = "";
  59. public string savePathName = "FIELD_FILES_REMEASURE"; //二次采集图像目录名
  60. Hashtable table; //国际化表
  61. string[] m_str_resultfilepaths;
  62. #endregion //-----------------------------------------------------------------------------------------------
  63. #region EChart相关变量------------------------------------------------------------------------------------
  64. //定义浏览器
  65. public CefSharp.WinForms.ChromiumWebBrowser browser;
  66. public CefSharp.WinForms.ChromiumWebBrowser browsermore;//多测量结果对比时使用
  67. public bool more = false;
  68. public bool trans = false;
  69. //定义浏览器
  70. public CefSharp.WinForms.ChromiumWebBrowser browser_trio;
  71. public CefSharp.WinForms.ChromiumWebBrowser browser_triomore;//多测量结果对比时使用
  72. public class JsEvent
  73. {
  74. public string MessageText { set; get; }
  75. public void ShowTest()
  76. {
  77. MessageBox.Show(MessageText);
  78. }
  79. }
  80. public JsEvent js = new JsEvent();
  81. public string m_reportname;
  82. public string data;
  83. public string dataCombin;
  84. public string type;
  85. public bool timerKG;
  86. #endregion //------------------------------------------------------------------------------------------------
  87. #region 各功能模块窗体 -----------------------------------------------------------------------------------
  88. /// <summary>
  89. /// 颗粒分布图
  90. /// </summary>
  91. public OTSIncAReportGraph.Controls.Control_DrawDistrbutionImageAndBSE im_Control_DrawDistrbutionImageAndBSE = null;
  92. /// <summary>
  93. /// 颗粒排序图
  94. /// </summary>
  95. public OTSIncAReportGraph.Controls.Control_DrawDistrbutionSortImage im_Control_DrawDistrbutionSortImage = null;
  96. /// <summary>
  97. /// 颗粒列表_分页
  98. /// </summary>
  99. public OTSIncAReportGrids.ParticlesGridDevidePage im_ParticlesGridDevidePage = null;
  100. /// <summary>
  101. /// 颗粒成份分布表
  102. /// </summary>
  103. public OTSIncAReportGrids.CompositionDistributionGrid im_CompositionDistributionGrid = null;
  104. /// <summary>
  105. /// 平均元素含量表
  106. /// </summary>
  107. public OTSIncAReportGrids.ElementCompositionAvgGrid im_ElementCompositionAvgGrid = null;
  108. /// <summary>
  109. /// 颗粒尺寸表
  110. /// </summary>
  111. public OTSIncAReportGrids.ParticlesSizeGrid im_ParticlesSizeGrid = null;
  112. /// <summary>
  113. /// 测量结果概况
  114. /// </summary>
  115. public OTSIncAReportGrids.ResultGrid im_ResultGrid = null;
  116. /// <summary>
  117. /// 颗粒成份图EChart
  118. /// </summary>
  119. public Control_ECharts.EChart_ParticlesComposition im_EChart_ParticlesComposition = null;
  120. /// <summary>
  121. /// 三元相图EChart
  122. /// </summary>
  123. public Control_ECharts.EChart_Trianglediagram im_EChart_Trianglediagram = null;
  124. /// <summary>
  125. /// 国标信息表方法一
  126. /// </summary>
  127. public OTSIncAReportGB.ChineseStandardABCDDS im_ChineseStandardABCDDS = null;
  128. /// <summary>
  129. /// 国标信息表方法二
  130. /// </summary>
  131. public OTSIncAReportGB.NationalStandardMethodTwo im_NationalStandardMethodTwo = null;
  132. /// <summary>
  133. /// 美标
  134. /// </summary>
  135. public OTSIncAReportGB.ASTMStandardABCDDS im_ASTMStandardABCDDS = null;
  136. /// <summary>
  137. /// 德标
  138. /// </summary>
  139. public OTSIncAReportGB.DINStandardABCDDS im_DINStandardABCDDS = null;
  140. public List<Particle> GetSelectedParticles()
  141. {
  142. List<Particle> parts = new List<Particle>();
  143. foreach (var p in selectedParticles.Values)
  144. {
  145. parts.Add(p.objParticleData);
  146. }
  147. return parts;
  148. }
  149. protected void DeleteSelectedParticles()
  150. {
  151. foreach (var p in selectedParticles.Values)
  152. {
  153. var dp = (p as DisplayParticle);
  154. dp.IsSelect = false;
  155. }
  156. }
  157. public void SetSelectedParticles(List<Particle> value)
  158. {
  159. foreach (var p in im_Control_DrawDistrbutionImageAndBSE.m_list_allDPart)
  160. {
  161. var dp = (p as DisplayParticle);
  162. foreach (var p2 in value)
  163. {
  164. if (dp.objParticleData.FieldId == p2.FieldId)
  165. {
  166. if (dp.objParticleData.ParticleId == p2.ParticleId)
  167. {
  168. dp.IsSelect = true;
  169. }
  170. }
  171. }
  172. }
  173. }
  174. #endregion //--------------------------------------------------------------------------------------------
  175. #region 窗体初始化及构造函数
  176. /// <summary>
  177. /// 窗体构造函数
  178. /// </summary>
  179. public frmReportApp()
  180. {
  181. m_OutputNlog = new OutputNlog();
  182. m_OutputNlog.Visible = true;
  183. log = NLog.LogManager.GetCurrentClassLogger();
  184. InitializeComponent();
  185. //初始化Ribbon类,操作Ribbon按钮的可用或者不可用
  186. m_RibbonFun = new OTSRibbonFun(this);
  187. //和DataMgr进行数据交互类
  188. m_rstDataMgr = new ResultDataMgr(this);
  189. //配置文件管理窗体
  190. m_ReportSysConfigForm = new frmReportSysConfig(this);
  191. //属性窗口
  192. m_conditionChoose = new frmReportConditionChoose(this);
  193. //树窗口
  194. m_RstWindow = new frmMeasureRstMgr(this);
  195. //分布图,排列图窗体
  196. m_SImageWindow = new frmSampleImage(this);
  197. //chart图表窗体
  198. m_ChartsWindow = new frmCharts(this);
  199. //grid表格窗体
  200. m_TablesWindow = new frmTables(this);
  201. SetTag();
  202. #region 国际化语言
  203. Language lan = new Language(this);
  204. table = lan.GetNameTable(this.Name);
  205. #endregion
  206. }
  207. /// <summary>
  208. /// 为生成后没有Name的控件添加标签,为了国际化语言设置时可以找到这个控件
  209. /// </summary>
  210. protected void SetTag()
  211. {
  212. ribbonPanel3.Tag = "ribbonPanel3";
  213. ribbonPanel2.Tag = "ribbonPanel2";
  214. rbSelTool.Tag = "rbSelTool";
  215. rbChoiceTools.Tag = "rbChoiceTools";
  216. ribbonTab1.Tag = "ribbonTab1";
  217. rbMenu.Tag = "rbMenu";
  218. dpbOpen.Tag = "dpbOpen";
  219. dpbExport.Tag = "dpbExport";
  220. ribbonOrbOptionButton1.Tag = "ribbonOrbOptionButton1";
  221. }
  222. /// <summary>
  223. /// 窗体构造函数,可接收多个测量结果文件
  224. /// </summary>
  225. public frmReportApp(string[] str_resultfilepaths)
  226. {
  227. m_OutputNlog = new OutputNlog();
  228. m_OutputNlog.Visible = true;
  229. log = NLog.LogManager.GetCurrentClassLogger();
  230. m_str_resultfilepaths = str_resultfilepaths;
  231. InitializeComponent();
  232. //初始化Ribbon类,操作Ribbon按钮的可用或者不可用
  233. m_RibbonFun = new OTSRibbonFun(this);
  234. //和DataMgr进行数据交互类
  235. m_rstDataMgr = new ResultDataMgr(this);//必须放在new frmReportSysConfig(this)前
  236. //配置文件管理窗体
  237. m_ReportSysConfigForm = new frmReportSysConfig(this);
  238. //属性窗口
  239. m_conditionChoose = new frmReportConditionChoose(this);
  240. //树窗口
  241. m_RstWindow = new frmMeasureRstMgr(this);
  242. //属性窗口
  243. //m_conditionChoose = new frmReportConditionChoose(this);
  244. //分布图,排列图窗体
  245. m_SImageWindow = new frmSampleImage(this);
  246. //chart图表窗体
  247. m_ChartsWindow = new frmCharts(this);
  248. //grid表格窗体
  249. m_TablesWindow = new frmTables(this);
  250. SetTag();
  251. #region 国际化语言
  252. Language lan = new Language(this);
  253. table = lan.GetNameTable(this.Name);
  254. #endregion
  255. }
  256. /// <summary>
  257. /// 报告主窗体加载事件
  258. /// </summary>
  259. /// <param name="sender"></param>
  260. /// <param name="e"></param>
  261. private void OTSReportApp_Load(object sender, EventArgs e)
  262. {
  263. //m_OutputNlog = new OutputNlog();
  264. log = NLog.LogManager.GetCurrentClassLogger();
  265. //------------- initialize the HMI of the main form.
  266. if (Cef.IsInitialized == false)
  267. {
  268. var settings = new CefSettings();
  269. settings.Locale = "zh-CN";
  270. settings.CefCommandLineArgs.Add("disable-gpu", "1");
  271. Cef.Initialize(settings);
  272. }
  273. //加载配置文件
  274. m_rstDataMgr.m_RptConfigFile.LoadDataFromFile();
  275. //设置菜单按钮,都为true状态
  276. m_RibbonFun.SetAllRibbonButnStatu(false);
  277. //创建,树窗口,属性grid窗口,分布图,grid,chart窗体等。
  278. CreateNewWorkspaceWindow();
  279. //激活测量结果窗体
  280. this.m_RstWindow.Activate();
  281. //激活表图窗体
  282. this.m_TablesWindow.Activate();
  283. //----------------end the initialization
  284. if (m_str_resultfilepaths != null)
  285. {
  286. //构造函数直接接收传入的测量结果文件,并加载
  287. for (int i = 0; i < m_str_resultfilepaths.Length; i++)
  288. {
  289. this.m_RstWindow.AddSampleResult(m_str_resultfilepaths[i].Replace("^", " "));
  290. }
  291. }
  292. }
  293. #endregion
  294. #region Ribbon菜单按钮及菜单相关按按钮事件
  295. /// <summary>
  296. /// 新建按钮事件
  297. /// </summary>
  298. /// <param name="sender"></param>
  299. /// <param name="e"></param>
  300. private void ribTitleNewFile_Click(object sender, EventArgs e)
  301. {
  302. InitReportProState();
  303. }
  304. /// <summary>
  305. /// 初始伦报告加载
  306. /// </summary>
  307. public void InitReportProState()
  308. {
  309. //清除树窗体
  310. m_RstWindow.treeView1.Nodes.Clear();
  311. //清除属性Grid
  312. m_conditionChoose.m_ConditionGrid = new OTSSourceGrid(m_conditionChoose);
  313. m_rstDataMgr.ResultFilesList.Clear();
  314. //清除各模块报表文件
  315. m_ChartsWindow.Controls.Clear();
  316. m_TablesWindow.Controls.Clear();
  317. m_SImageWindow.Controls.Clear();
  318. //再重新初始化下拉菜单和ribbon菜单中的按钮状态
  319. m_RibbonFun.SetAllRibbonButnStatu(false);
  320. im_Control_DrawDistrbutionImageAndBSE = null;
  321. im_Control_DrawDistrbutionSortImage = null;
  322. im_ParticlesGridDevidePage = null;
  323. im_CompositionDistributionGrid = null;
  324. im_ElementCompositionAvgGrid = null;
  325. im_ParticlesSizeGrid = null;
  326. im_ResultGrid = null;
  327. }
  328. /// <summary>
  329. /// 程序管理按钮点击事件
  330. /// </summary>
  331. /// <param name="sender"></param>
  332. /// <param name="e"></param>
  333. private void RibbonOrbOptionButton1_Click(object sender, EventArgs e)
  334. {
  335. //程序管理
  336. m_ReportSysConfigForm.ShowDialog();
  337. }
  338. /// <summary>
  339. /// 打开报告项目文件按钮事件
  340. /// </summary>
  341. /// <param name="sender"></param>
  342. /// <param name="e"></param>
  343. private void rbOpen_Click(object sender, EventArgs e)
  344. {
  345. string path = "";
  346. OpenFileDialog fileDialog = new OpenFileDialog();
  347. fileDialog.Filter = "text File|*.rst";
  348. fileDialog.RestoreDirectory = true;
  349. if (fileDialog.ShowDialog() == DialogResult.OK)
  350. {
  351. path = System.IO.Path.GetFullPath(fileDialog.FileName);
  352. log.Info("begin to load the result!");
  353. this.m_RstWindow.AddSampleResult(path);
  354. }
  355. }
  356. /// <summary>
  357. /// 模板导出按钮事件
  358. /// </summary>
  359. /// <param name="sender"></param>
  360. /// <param name="e"></param>
  361. private void rbOut_Click(object sender, EventArgs e)
  362. {
  363. OTSReport_Export oe = new OTSReport_Export(this);
  364. oe.ShowDialog();
  365. }
  366. /// <summary>
  367. /// 全图匹配按钮事件
  368. /// </summary>
  369. /// <param name="sender"></param>
  370. /// <param name="e"></param>
  371. private void rbAllImage_Click(object sender, EventArgs e)
  372. {
  373. int tabIndex = (int)(m_conditionChoose.tabIndex);
  374. switch (tabIndex)
  375. {
  376. case (int)DisplayPicutureType.AnalyzeImg:
  377. //int idx = m_DataMgrFun.GetPropIndexByPropItemName(SourceGridData.ConditionItemList, OTSSampleReportInfo.OTS_REPORT_PROP_GRID_ITEMS.IMAGE_DISPLAY_TYPE);
  378. //int imgDisType = SourceGridData.ConditionItemList[idx].comboDownList.IndexOf(SourceGridData.ConditionItemList[idx].itemVal.ToString());
  379. int imgDisType=m_conditionChoose.m_SourceGridData.GetComboDownListIndexByItemName(OTS_REPORT_PROP_GRID_ITEMS.IMAGE_DISPLAY_TYPE);
  380. if (imgDisType == 0)
  381. {
  382. if (im_Control_DrawDistrbutionImageAndBSE != null)
  383. {
  384. //分布图
  385. im_Control_DrawDistrbutionImageAndBSE.FullGraphMatch();
  386. im_Control_DrawDistrbutionImageAndBSE.Invalidate();
  387. }
  388. }
  389. else
  390. {
  391. if (im_Control_DrawDistrbutionSortImage != null)
  392. {
  393. //排列图
  394. }
  395. }
  396. break;
  397. case (int)DisplayPicutureType.AnalyzeDataTable:
  398. break;
  399. case (int)DisplayPicutureType.AnalyzeDataChart:
  400. break;
  401. default:
  402. break;
  403. }
  404. }
  405. /// <summary>
  406. /// 宽度匹配按钮事件
  407. /// </summary>
  408. /// <param name="sender"></param>
  409. /// <param name="e"></param>
  410. private void rbWidthImage_Click(object sender, EventArgs e)
  411. {
  412. int tabIndex = (int)(m_conditionChoose.tabIndex);
  413. switch (tabIndex)
  414. {
  415. case (int)DisplayPicutureType.AnalyzeImg:
  416. //int idx = m_DataMgrFun.GetPropIndexByPropItemName(SourceGridData.ConditionItemList, OTSSampleReportInfo.OTS_REPORT_PROP_GRID_ITEMS.IMAGE_DISPLAY_TYPE);
  417. //int imgDisType = SourceGridData.ConditionItemList[idx].comboDownList.IndexOf(SourceGridData.ConditionItemList[idx].itemVal.ToString());
  418. int imgDisType = m_conditionChoose.m_SourceGridData.GetComboDownListIndexByItemName(OTS_REPORT_PROP_GRID_ITEMS.IMAGE_DISPLAY_TYPE);
  419. if (imgDisType == 0)
  420. {
  421. if (im_Control_DrawDistrbutionImageAndBSE != null)
  422. {
  423. //分布图
  424. im_Control_DrawDistrbutionImageAndBSE.WidthMatch();
  425. im_Control_DrawDistrbutionImageAndBSE.Invalidate();
  426. }
  427. }
  428. else
  429. {
  430. if (im_Control_DrawDistrbutionSortImage != null)
  431. {
  432. //排列图
  433. }
  434. }
  435. break;
  436. case (int)DisplayPicutureType.AnalyzeDataTable:
  437. break;
  438. case (int)DisplayPicutureType.AnalyzeDataChart:
  439. break;
  440. default:
  441. break;
  442. }
  443. }
  444. /// <summary>
  445. /// 帧图边框按钮事件
  446. /// </summary>
  447. /// <param name="sender"></param>
  448. /// <param name="e"></param>
  449. private void rbFrame_Click(object sender, EventArgs e)
  450. {
  451. int tabIndex = (int)(m_conditionChoose.tabIndex);
  452. switch (tabIndex)
  453. {
  454. case (int)DisplayPicutureType.AnalyzeImg:
  455. //int idx = m_DataMgrFun.GetPropIndexByPropItemName(SourceGridData.ConditionItemList, OTSSampleReportInfo.OTS_REPORT_PROP_GRID_ITEMS.IMAGE_DISPLAY_TYPE);
  456. //int imgDisType = SourceGridData.ConditionItemList[idx].comboDownList.IndexOf(SourceGridData.ConditionItemList[idx].itemVal.ToString());
  457. int imgDisType = m_conditionChoose.m_SourceGridData.GetComboDownListIndexByItemName(OTS_REPORT_PROP_GRID_ITEMS.IMAGE_DISPLAY_TYPE);
  458. if (imgDisType == 0)
  459. {
  460. if (im_Control_DrawDistrbutionImageAndBSE != null)
  461. {
  462. //分布图
  463. im_Control_DrawDistrbutionImageAndBSE.ShowGridLine();
  464. im_Control_DrawDistrbutionImageAndBSE.Invalidate();
  465. }
  466. }
  467. else
  468. {
  469. if (im_Control_DrawDistrbutionSortImage != null)
  470. {
  471. }
  472. }
  473. break;
  474. case (int)DisplayPicutureType.AnalyzeDataTable:
  475. break;
  476. case (int)DisplayPicutureType.AnalyzeDataChart:
  477. break;
  478. default:
  479. break;
  480. }
  481. }
  482. /// <summary>
  483. /// 标尺按钮事件
  484. /// </summary>
  485. /// <param name="sender"></param>
  486. /// <param name="e"></param>
  487. private void rbStaff_Click(object sender, EventArgs e)
  488. {
  489. int tabIndex = (int)(m_conditionChoose.tabIndex);
  490. switch (tabIndex)
  491. {
  492. case (int)DisplayPicutureType.AnalyzeImg:
  493. //int idx = m_DataMgrFun.GetPropIndexByPropItemName(SourceGridData.ConditionItemList, OTSSampleReportInfo.OTS_REPORT_PROP_GRID_ITEMS.IMAGE_DISPLAY_TYPE);
  494. //int imgDisType = SourceGridData.ConditionItemList[idx].comboDownList.IndexOf(SourceGridData.ConditionItemList[idx].itemVal.ToString());
  495. int imgDisType = m_conditionChoose.m_SourceGridData.GetComboDownListIndexByItemName(OTS_REPORT_PROP_GRID_ITEMS.IMAGE_DISPLAY_TYPE);
  496. if (imgDisType == 0)
  497. {
  498. if (im_Control_DrawDistrbutionImageAndBSE != null)
  499. {
  500. //分布图
  501. im_Control_DrawDistrbutionImageAndBSE.ShowRulerControl();
  502. im_Control_DrawDistrbutionImageAndBSE.Invalidate();
  503. }
  504. }
  505. else
  506. {
  507. if (im_Control_DrawDistrbutionSortImage != null)
  508. {
  509. im_Control_DrawDistrbutionSortImage.ShowRulerControl();
  510. im_Control_DrawDistrbutionSortImage.Invalidate();
  511. }
  512. }
  513. break;
  514. case (int)DisplayPicutureType.AnalyzeDataTable:
  515. break;
  516. case (int)DisplayPicutureType.AnalyzeDataChart:
  517. break;
  518. default:
  519. break;
  520. }
  521. }
  522. /// <summary>
  523. /// 恢复按钮事件
  524. /// </summary>
  525. /// <param name="sender"></param>
  526. /// <param name="e"></param>
  527. private void rbRenew_Click(object sender, EventArgs e)
  528. {
  529. rbRenewFun(false, 0, 0);
  530. }
  531. public void rbRenewFun(bool isReview, int FieldId, int ParticleId)
  532. {
  533. int tabIndex = (int)m_conditionChoose.tabIndex;
  534. //int idx = m_DataMgrFun.GetPropIndexByPropItemName(SourceGridData.ConditionItemList, OTSSampleReportInfo.OTS_REPORT_PROP_GRID_ITEMS.IMAGE_DISPLAY_TYPE);
  535. //int DisType = SourceGridData.ConditionItemList[idx].comboDownList.IndexOf(SourceGridData.ConditionItemList[idx].itemVal.ToString());
  536. int DisType = m_conditionChoose.m_SourceGridData.GetComboDownListIndexByItemName(OTS_REPORT_PROP_GRID_ITEMS.IMAGE_DISPLAY_TYPE);
  537. switch (tabIndex)
  538. {
  539. case (int)DisplayPicutureType.AnalyzeImg:
  540. if (DisType == (int)IMAGE_DISPLAY_TYPE.DISTRIBUTION)
  541. {
  542. if (im_Control_DrawDistrbutionImageAndBSE != null)
  543. {
  544. //分布图
  545. im_Control_DrawDistrbutionImageAndBSE.ShowRulerControl(false);
  546. im_Control_DrawDistrbutionImageAndBSE.ShowGridLine(false);
  547. im_Control_DrawDistrbutionImageAndBSE.Invalidate();
  548. m_SImageWindow.Controls.Clear();
  549. im_Control_DrawDistrbutionImageAndBSE = new OTSIncAReportGraph.Controls.Control_DrawDistrbutionImageAndBSE(this);
  550. im_Control_DrawDistrbutionImageAndBSE.isReView = isReview;
  551. im_Control_DrawDistrbutionImageAndBSE.reViewFieldId = FieldId;
  552. im_Control_DrawDistrbutionImageAndBSE.reViewParticleId = ParticleId;
  553. im_Control_DrawDistrbutionImageAndBSE.Dock = DockStyle.Fill;
  554. m_SImageWindow.Controls.Add(im_Control_DrawDistrbutionImageAndBSE);
  555. m_SImageWindow.Activate();
  556. im_Control_DrawDistrbutionImageAndBSE.ShowSourceName = "";
  557. im_Control_DrawDistrbutionImageAndBSE.DrawDistrbutionImageAndBSE_ByQuery(m_conditionChoose.m_SourceGridData);
  558. im_Control_DrawDistrbutionImageAndBSE.SetSelectParticle(GetSelectedParticles());
  559. ConditionItem imgType = m_conditionChoose.m_CurrentConditions[OTS_REPORT_PROP_GRID_ITEMS.IMAGE_TYPE];
  560. //切换分布图显示方式
  561. IMAGE_TYPE t = (IMAGE_TYPE)imgType.itemVal;
  562. im_Control_DrawDistrbutionImageAndBSE.ShowMode(t);
  563. //并删除排列图
  564. im_Control_DrawDistrbutionSortImage = null;
  565. }
  566. }
  567. if (DisType == (int)IMAGE_DISPLAY_TYPE.IMAGE_GRID)
  568. {
  569. if (im_Control_DrawDistrbutionSortImage != null)
  570. {
  571. //排序图
  572. im_Control_DrawDistrbutionSortImage.ShowRulerControl(false);
  573. im_Control_DrawDistrbutionSortImage.Invalidate();
  574. m_SImageWindow.Controls.Clear();
  575. im_Control_DrawDistrbutionSortImage = new OTSIncAReportGraph.Controls.Control_DrawDistrbutionSortImage(this);
  576. im_Control_DrawDistrbutionSortImage.Dock = DockStyle.Fill;
  577. m_SImageWindow.Controls.Add(im_Control_DrawDistrbutionSortImage);
  578. m_SImageWindow.Activate();
  579. im_Control_DrawDistrbutionSortImage.ShowSourceName = "";
  580. im_Control_DrawDistrbutionSortImage.GetDistrbutionSortimage_ByQuery(m_conditionChoose.m_CurrentConditions);
  581. im_Control_DrawDistrbutionSortImage.SetSelectParticle(GetSelectedParticles());
  582. }
  583. }
  584. break;
  585. case (int)DisplayPicutureType.AnalyzeDataTable:
  586. break;
  587. case (int)DisplayPicutureType.AnalyzeDataChart:
  588. break;
  589. default:
  590. break;
  591. }
  592. }
  593. /// <summary>
  594. /// 反选操作按钮事件
  595. /// </summary>
  596. /// <param name="sender"></param>
  597. /// <param name="e"></param>
  598. private void rbReverseSelection_Click(object sender, EventArgs e)
  599. {
  600. int tabIndex = (int)(m_conditionChoose.tabIndex);
  601. switch (tabIndex)
  602. {
  603. case (int)DisplayPicutureType.AnalyzeImg:
  604. //int idx = m_DataMgrFun.GetPropIndexByPropItemName(SourceGridData.ConditionItemList, OTSIncAReportApp.OTSSampleReportInfo.OTS_REPORT_PROP_GRID_ITEMS.IMAGE_DISPLAY_TYPE);
  605. //int imgDisType = SourceGridData.ConditionItemList[idx].comboDownList.IndexOf(SourceGridData.ConditionItemList[idx].itemVal.ToString());
  606. int imgDisType = m_conditionChoose.m_SourceGridData.GetComboDownListIndexByItemName(OTS_REPORT_PROP_GRID_ITEMS.IMAGE_DISPLAY_TYPE);
  607. if (imgDisType == 0)
  608. {
  609. if (im_Control_DrawDistrbutionImageAndBSE != null)
  610. {
  611. //分布图
  612. im_Control_DrawDistrbutionImageAndBSE.ReverseSelection();
  613. }
  614. }
  615. else
  616. {
  617. if (im_Control_DrawDistrbutionSortImage != null)
  618. {
  619. im_Control_DrawDistrbutionSortImage.ReverSeSelection();
  620. }
  621. }
  622. break;
  623. case (int)DisplayPicutureType.AnalyzeDataTable:
  624. break;
  625. case (int)DisplayPicutureType.AnalyzeDataChart:
  626. break;
  627. default:
  628. break;
  629. }
  630. }
  631. /// <summary>
  632. /// 圆形工具按钮事件
  633. /// </summary>
  634. /// <param name="sender"></param>
  635. /// <param name="e"></param>
  636. private void rbCircular_Click(object sender, EventArgs e)
  637. {
  638. int tabIndex = (int)(m_conditionChoose.tabIndex);
  639. switch (tabIndex)
  640. {
  641. case (int)DisplayPicutureType.AnalyzeImg:
  642. //int idx = m_DataMgrFun.GetPropIndexByPropItemName(SourceGridData.ConditionItemList, OTSIncAReportApp.OTSSampleReportInfo.OTS_REPORT_PROP_GRID_ITEMS.IMAGE_DISPLAY_TYPE);
  643. //int imgDisType = SourceGridData.ConditionItemList[idx].comboDownList.IndexOf(SourceGridData.ConditionItemList[idx].itemVal.ToString());
  644. IMAGE_DISPLAY_TYPE imgDisType = (IMAGE_DISPLAY_TYPE)m_conditionChoose.m_SourceGridData.GetComboDownListIndexByItemName(OTS_REPORT_PROP_GRID_ITEMS.IMAGE_DISPLAY_TYPE);
  645. if (imgDisType == IMAGE_DISPLAY_TYPE.DISTRIBUTION)
  646. {
  647. if (im_Control_DrawDistrbutionImageAndBSE != null)
  648. {
  649. //分布图
  650. im_Control_DrawDistrbutionImageAndBSE.MultiSelect_Ellipse();
  651. }
  652. }
  653. else
  654. {
  655. if (im_Control_DrawDistrbutionSortImage != null)
  656. {
  657. im_Control_DrawDistrbutionSortImage.MultiSelect_Ellipse();
  658. }
  659. }
  660. break;
  661. case (int)DisplayPicutureType.AnalyzeDataTable:
  662. break;
  663. case (int)DisplayPicutureType.AnalyzeDataChart:
  664. break;
  665. default:
  666. break;
  667. }
  668. }
  669. /// <summary>
  670. /// 矩形工具按钮事件
  671. /// </summary>
  672. /// <param name="sender"></param>
  673. /// <param name="e"></param>
  674. private void rbRectangle_Click(object sender, EventArgs e)
  675. {
  676. int tabIndex = (int)(m_conditionChoose.tabIndex);
  677. switch (tabIndex)
  678. {
  679. case (int)DisplayPicutureType.AnalyzeImg:
  680. //int idx = m_DataMgrFun.GetPropIndexByPropItemName(SourceGridData.ConditionItemList, OTSIncAReportApp.OTSSampleReportInfo.OTS_REPORT_PROP_GRID_ITEMS.IMAGE_DISPLAY_TYPE);
  681. //int imgDisType = SourceGridData.ConditionItemList[idx].comboDownList.IndexOf(SourceGridData.ConditionItemList[idx].itemVal.ToString());
  682. int imgDisType = m_conditionChoose.m_SourceGridData.GetComboDownListIndexByItemName(OTS_REPORT_PROP_GRID_ITEMS.IMAGE_DISPLAY_TYPE);
  683. if (imgDisType == 0)
  684. {
  685. if (im_Control_DrawDistrbutionImageAndBSE != null)
  686. {
  687. //分布图
  688. im_Control_DrawDistrbutionImageAndBSE.MultiSelect_Rectangle();
  689. }
  690. }
  691. else
  692. {
  693. if (im_Control_DrawDistrbutionSortImage != null)
  694. {
  695. im_Control_DrawDistrbutionSortImage.MultiSelect_Rectangle();
  696. }
  697. }
  698. break;
  699. case (int)DisplayPicutureType.AnalyzeDataTable:
  700. break;
  701. case (int)DisplayPicutureType.AnalyzeDataChart:
  702. break;
  703. default:
  704. break;
  705. }
  706. }
  707. /// <summary>
  708. /// 取消多边形选择工具按钮事件
  709. /// </summary>
  710. /// <param name="sender"></param>
  711. /// <param name="e"></param>
  712. private void rbCancel_Click(object sender, EventArgs e)
  713. {
  714. int tabIndex = (int)(m_conditionChoose.tabIndex);
  715. DeleteSelectedParticles();
  716. switch (tabIndex)
  717. {
  718. case (int)DisplayPicutureType.AnalyzeImg:
  719. //int idx = m_DataMgrFun.GetPropIndexByPropItemName(SourceGridData.ConditionItemList, OTSIncAReportApp.OTSSampleReportInfo.OTS_REPORT_PROP_GRID_ITEMS.IMAGE_DISPLAY_TYPE);
  720. //int imgDisType = SourceGridData.ConditionItemList[idx].comboDownList.IndexOf(SourceGridData.ConditionItemList[idx].itemVal.ToString());
  721. int imgDisType = m_conditionChoose.m_SourceGridData.GetComboDownListIndexByItemName(OTS_REPORT_PROP_GRID_ITEMS.IMAGE_DISPLAY_TYPE);
  722. if (imgDisType == 0)// oper_module == "颗粒分布图"
  723. {
  724. if (im_Control_DrawDistrbutionImageAndBSE != null)
  725. {
  726. //分布图
  727. im_Control_DrawDistrbutionImageAndBSE.DeselectAllParticle();
  728. selectedParticles.Clear();
  729. }
  730. }
  731. else
  732. {
  733. if (im_Control_DrawDistrbutionSortImage != null)
  734. {
  735. im_Control_DrawDistrbutionSortImage.DeselectAllParticle();
  736. selectedParticles.Clear();
  737. }
  738. }
  739. break;
  740. case (int)DisplayPicutureType.AnalyzeDataTable:
  741. break;
  742. case (int)DisplayPicutureType.AnalyzeDataChart:
  743. break;
  744. default:
  745. break;
  746. }
  747. }
  748. /// <summary>
  749. /// 二次采集按钮
  750. /// </summary>
  751. /// <param name="sender"></param>
  752. /// <param name="e"></param>
  753. private void rbReMeasure_Click(object sender, EventArgs e)
  754. {
  755. if (ReportFun == null)
  756. {
  757. resultFile = m_rstDataMgr.CurResultFile;
  758. ReportFun = new OTSImageDisHelp(resultFile);
  759. }
  760. //二次测量参数页面
  761. frmReMeasure frmReMeasure = new frmReMeasure(ReportFun, this);
  762. frmReMeasure.ShowDialog();
  763. }
  764. #endregion
  765. #region 自定义封装相关方法
  766. /// <summary>
  767. /// 新建一个工作区域
  768. /// </summary>
  769. public void CreateNewWorkspaceWindow()
  770. {
  771. //创建测量数据窗口
  772. CreateCTablesWindow();
  773. //Show BSE图窗口
  774. CreateSampleWindow();
  775. //创建图表窗口
  776. CreateChartsWindow();
  777. m_OutputNlog.Show(DockWindowPanel, OTS.WinFormsUI.Docking.DockState.DockRight);
  778. m_OutputNlog.Visible = true;
  779. m_RstWindow.Show(DockWindowPanel, OTS.WinFormsUI.Docking.DockState.DockLeft);
  780. m_conditionChoose.Show(DockWindowPanel);
  781. DockWindowPanel.DockLeftPortion = 300;
  782. DockWindowPanel.DockRightPortion = 351;
  783. }
  784. /// <summary>
  785. /// 创建新的窗体
  786. /// </summary>
  787. /// <param name="WorkWindow"></param>
  788. /// <param name="iType"></param>
  789. /// <returns></returns>
  790. private OTS.WinFormsUI.Docking.DockContent CreateNewDocument(OTS.WinFormsUI.Docking.DockContent WorkWindow, DisplayPicutureType iType)
  791. {
  792. string text = "";
  793. if (iType == DisplayPicutureType.AnalyzeImg)
  794. {
  795. text = table["analysisdiagram"].ToString(); ;
  796. }
  797. else if (iType == DisplayPicutureType.AnalyzeDataTable)
  798. {
  799. text = table["analysisdatasheet"].ToString();
  800. }
  801. else if (iType == DisplayPicutureType.AnalyzeDataChart)
  802. {
  803. text = table["analysisdatachart"].ToString();
  804. }
  805. WorkWindow.Text = text;
  806. return WorkWindow;
  807. }
  808. /// <summary>
  809. /// 创建样品BSE图窗口
  810. /// </summary>
  811. public void CreateSampleWindow()
  812. {
  813. if (null == m_SImageWindow)
  814. {
  815. m_SImageWindow = new frmSampleImage(this);
  816. }
  817. m_SImageWindow = (frmSampleImage)CreateNewDocument(m_SImageWindow, DisplayPicutureType.AnalyzeImg);
  818. if (DockWindowPanel.DocumentStyle == DocumentStyle.SystemMdi)
  819. {
  820. m_SImageWindow.MdiParent = this;
  821. m_SImageWindow.Show();
  822. }
  823. else
  824. {
  825. m_SImageWindow.Show(DockWindowPanel);
  826. }
  827. }
  828. /// <summary>
  829. /// 创建Grid表格窗体
  830. /// </summary>
  831. private void CreateCTablesWindow()
  832. {
  833. if (null == m_TablesWindow)
  834. {
  835. m_TablesWindow = new frmTables(this);
  836. }
  837. m_TablesWindow = (frmTables)CreateNewDocument(m_TablesWindow, DisplayPicutureType.AnalyzeDataTable);
  838. if (DockWindowPanel.DocumentStyle == DocumentStyle.SystemMdi)
  839. {
  840. m_TablesWindow.MdiParent = this;
  841. m_TablesWindow.Show();
  842. }
  843. else
  844. {
  845. m_TablesWindow.Show(DockWindowPanel);
  846. }
  847. }
  848. /// <summary>
  849. /// 创建chart图表窗体
  850. /// </summary>
  851. private void CreateChartsWindow()
  852. {
  853. if (null == m_ChartsWindow)
  854. {
  855. m_ChartsWindow = new frmCharts(this);
  856. }
  857. m_ChartsWindow = (frmCharts)CreateNewDocument(m_ChartsWindow, DisplayPicutureType.AnalyzeDataChart);
  858. if (DockWindowPanel.DocumentStyle == DocumentStyle.SystemMdi)
  859. {
  860. m_ChartsWindow.MdiParent = this;
  861. m_ChartsWindow.Show();
  862. }
  863. else
  864. {
  865. m_ChartsWindow.Show(DockWindowPanel);
  866. }
  867. }
  868. /// <summary>
  869. /// 新建样品时提示保存样品信息Messagebox
  870. /// </summary>
  871. /// <returns></returns>
  872. public int ShowSaveInfoMsgBox()
  873. {
  874. //是否保存修改信息,保存样品信息提示
  875. int iRev = (int)MessageBox.Show("Save modification information", "Tips", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning);
  876. if (iRev == (int)DialogResult.Yes)
  877. {
  878. return (int)MessageBoxRev.DIALOG_YES;
  879. }
  880. else if (iRev == (int)DialogResult.No)
  881. {
  882. return (int)MessageBoxRev.DIALOG_NO;
  883. }
  884. else
  885. {
  886. return (int)MessageBoxRev.DIALOG_CANCEL;
  887. }
  888. }
  889. #endregion
  890. #region 系统菜单相关功能
  891. private void ribbonOrbMenuItem4_Click(object sender, EventArgs e)
  892. {
  893. MemoryManagementClass.FlushMemory();
  894. //系统菜单,输出
  895. OTSReport_Export oe = new OTSReport_Export(this);
  896. oe.ShowDialog();
  897. oe.Dispose();
  898. oe = null;
  899. MemoryManagementClass.FlushMemory();
  900. }
  901. private void frmReportApp_FormClosed(object sender, FormClosedEventArgs e)
  902. {
  903. //string strDBpathGB =m_DataMgrFun. resultFilesList[0].FilePath + "\\" + "ReportGBDB.db";
  904. //File.Delete(strDBpathGB);
  905. Process.GetCurrentProcess().Kill();
  906. this.Hide();//打开EChar图后,回收浏览器资源暂卡,为达到操作流畅性,先隐藏窗体再回收资源
  907. this.Invoke(new Action(() =>
  908. {
  909. if (Cef.IsInitialized)
  910. Cef.Shutdown();
  911. }));
  912. }
  913. #endregion
  914. private void dpbOpen_Click(object sender, EventArgs e)
  915. {
  916. OpenProFile();
  917. }
  918. /// <summary>
  919. /// 打开报告项目工程文件,封装方法
  920. /// </summary>
  921. /// <returns></returns>
  922. private bool OpenProFile()
  923. {
  924. OpenFileDialog openFileDialog = new OpenFileDialog();
  925. openFileDialog.Filter = "Measure Project Files((*.prj)|*.prj";
  926. openFileDialog.ValidateNames = true;
  927. openFileDialog.CheckPathExists = true;
  928. openFileDialog.CheckFileExists = true;
  929. openFileDialog.Multiselect = false;
  930. if (openFileDialog.ShowDialog() == DialogResult.OK)
  931. {
  932. string strFilePath = System.IO.Path.GetDirectoryName(openFileDialog.FileName);
  933. System.IO.DirectoryInfo folder = new System.IO.DirectoryInfo(strFilePath);
  934. foreach (System.IO.DirectoryInfo directory in folder.GetDirectories())
  935. {
  936. foreach (System.IO.FileInfo file in directory.GetFiles("*.rst"))
  937. {
  938. this.m_RstWindow.AddSampleResult(file.FullName);
  939. }
  940. }
  941. return true;
  942. }
  943. else return false;
  944. }
  945. private void frmReportApp_FormClosing(object sender, FormClosingEventArgs e)
  946. {
  947. //ServiceInterface.SemController sem = new ServiceInterface.SemController();
  948. //sem.DisConnect();
  949. }
  950. private void ribbonOrbMenuItem_Extremum_Click(object sender, EventArgs e)
  951. {
  952. try
  953. {
  954. System.Diagnostics.Process p = System.Diagnostics.Process.Start(".\\OTSExtremum.exe");
  955. p.WaitForExit();
  956. }
  957. catch (Exception ex)
  958. {
  959. log.Error("OTSExtremum:" + ex.ToString());
  960. }
  961. }
  962. private void rbHelp_Click(object sender, EventArgs e)
  963. {
  964. Help help = new Help();
  965. help.ShowDialog();
  966. }
  967. protected override void DefWndProc(ref Message m)
  968. {
  969. switch (m.Msg)
  970. {
  971. case LogMsgID:
  972. m_LogMsg = new PostLogMsg();
  973. m_LogMsg = (PostLogMsg)Marshal.PtrToStructure(m.LParam, typeof(PostLogMsg));
  974. var log = NLog.LogManager.GetCurrentClassLogger();
  975. string s = GetString(m_LogMsg.logMessage);
  976. switch (m_LogMsg.logLevel)
  977. {
  978. case 1:
  979. log.Trace(s);
  980. break;
  981. case 2:
  982. log.Debug(s);
  983. break;
  984. case 3:
  985. log.Info(s);
  986. break;
  987. case 4:
  988. log.Warn(s);
  989. break;
  990. case 5:
  991. log.Error(s);
  992. break;
  993. case 6:
  994. log.Fatal(s);
  995. break;
  996. }
  997. break;
  998. default:
  999. base.DefWndProc(ref m);
  1000. break;
  1001. }
  1002. }
  1003. private string GetString(char[] csStr)
  1004. {
  1005. int ilen = csStr.Length;
  1006. string csName = new string(csStr); //MSTMsg.STMSampleStu.cSName
  1007. csName.IndexOf('\0');
  1008. csName = csName.Substring(0, csName.IndexOf('\0'));
  1009. return csName;
  1010. }
  1011. private void Backup_Click(object sender, EventArgs e)
  1012. {
  1013. resultFile = m_rstDataMgr.CurResultFile;
  1014. ReportFun = new OTSImageDisHelp(resultFile);
  1015. if (BackupDatabase())
  1016. {
  1017. MessageBox.Show("Backup succeeded");
  1018. }
  1019. else
  1020. {
  1021. MessageBox.Show("Backup failed");
  1022. }
  1023. }
  1024. private bool BackupDatabase()
  1025. {
  1026. //创建备份数据库文件夹
  1027. string sourcePath = resultFile.FilePath + "\\FIELD_FILES\\Inclusion.db";//源文件路径
  1028. string sourceName = "Inclusion.db";//源文件名称
  1029. string folderPath = resultFile.FilePath + "\\FIELD_FILES\\Backups";//目标文件夹
  1030. string Fields = "";
  1031. for (int i = 1; i < 201; i++)
  1032. {
  1033. if (System.IO.Directory.Exists(folderPath + i.ToString()))
  1034. {
  1035. Fields = folderPath + i.ToString();
  1036. continue;
  1037. }
  1038. else
  1039. {
  1040. System.IO.Directory.CreateDirectory(folderPath + i.ToString());
  1041. Fields = folderPath + i.ToString();
  1042. break;
  1043. }
  1044. }
  1045. if (Fields == "")
  1046. {
  1047. return false;
  1048. }
  1049. //复制数据库文件
  1050. string targetPath = Path.Combine(Fields, sourceName);
  1051. FileInfo file = new FileInfo(sourcePath);
  1052. if (file.Exists)
  1053. {
  1054. file.CopyTo(targetPath, true);
  1055. }
  1056. return true;
  1057. }
  1058. }
  1059. }