FormHOZMain.cs 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539
  1. using FileManager;
  2. using MeasureData;
  3. using MeasureThread;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.ComponentModel;
  7. using System.Configuration;
  8. using System.Data;
  9. using System.Drawing;
  10. using System.IO;
  11. using System.Linq;
  12. using System.Runtime.InteropServices;
  13. using System.Text;
  14. using System.Threading.Tasks;
  15. using System.Windows.Forms;
  16. using static MeasureThread.ThreadStatusEventArgs;
  17. namespace HOZProject
  18. {
  19. public partial class FormHOZMain : Form
  20. {
  21. #region 成员变量
  22. private BackgroundWorker m_BackgroundWorker;// 申明后台对象
  23. /// <summary>
  24. /// 测量文件
  25. /// </summary>
  26. public MeasureFile m_MeasureFile;
  27. /// 测量线程
  28. public Measure m_Ms;
  29. /// <summary>
  30. /// 显示日志窗体
  31. /// </summary>
  32. Form m_FormLog = null;
  33. /// <summary>
  34. /// 显示实例化窗体
  35. /// </summary>
  36. Form m_FormInit = null;
  37. /// <summary>
  38. /// 初始化用户控件
  39. /// </summary>
  40. UControl_Init uControl_Init = null;
  41. //流程控制
  42. public int m_MeasureType = (int)MeasureMsgManage.measureType.Cut;
  43. Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
  44. #endregion
  45. #region 构造函数
  46. public FormHOZMain()
  47. {
  48. InitializeComponent();
  49. //在线程操作过程中,可以设置控件属性
  50. Control.CheckForIllegalCrossThreadCalls = false;
  51. m_BackgroundWorker = new BackgroundWorker(); // 实例化后台对象
  52. m_BackgroundWorker.WorkerReportsProgress = true; // 设置可以通告进度
  53. m_BackgroundWorker.WorkerSupportsCancellation = true; // 设置可以取消
  54. m_BackgroundWorker.DoWork += new DoWorkEventHandler(DoWork);
  55. m_BackgroundWorker.ProgressChanged += new ProgressChangedEventHandler(UpdateProgress);
  56. m_BackgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(CompletedWork);
  57. LogManager.InitManulLog();
  58. }
  59. #endregion
  60. #region 测量线程
  61. void DoWork(object sender, DoWorkEventArgs e)
  62. {
  63. m_Ms = new Measure(ConfigurationManager.AppSettings["WebServerIP"].ToString(),
  64. ConfigurationManager.AppSettings["WebServerPort"].ToString(),
  65. ConfigurationManager.AppSettings["WebServerUrl"].ToString());
  66. m_Ms.InitMeas(m_MeasureFile);
  67. m_Ms.SendThreadStatus += new ThreadStatusHandler(displayMessage); //注册事件
  68. m_Ms.SendCutHolesStatus += new CutHolesStatusHandler(displayCutHoleMessage); //注册事件
  69. //设置控件操作
  70. SetWinControlMeasureState(false);
  71. //自动测量的全过程
  72. m_Ms.DoMeasure();
  73. //定位
  74. //切割
  75. //分析位置
  76. //截面
  77. }
  78. public void displayMessage(object sender, ThreadStatusEventArgs e)
  79. {
  80. //主界面显示内容
  81. this.BeginInvoke((Action)delegate
  82. {
  83. //流程编号
  84. string eCode = e.Step_Code;
  85. //流程开始时间
  86. DateTime eTime = e.Time;
  87. //图片对象
  88. PictureInformation ePictureInformation = e.Picture_Information;
  89. //当前状态
  90. string eState = e.State;
  91. this.listmsg.Items.Add(e.Time.ToString() +"_"+ e.State);
  92. //显示流程中对应编号的内容
  93. MeasureMsgManage.ShowMsgContent(this, e);
  94. ShowLogInfo();
  95. });
  96. }
  97. public void displayCutHoleMessage(object sender, CutHolesStatusEventArgs e)
  98. {
  99. //主界面显示内容
  100. this.BeginInvoke((Action)delegate
  101. {
  102. //this.listmsg.Items.Add(e.HoleName.ToString() + e.State);
  103. ChangeCutHoleState(e.HoleName.ToString(), Convert.ToInt32(e.State));
  104. });
  105. }
  106. void UpdateProgress(object sender, ProgressChangedEventArgs e)
  107. {
  108. }
  109. void CompletedWork(object sender, RunWorkerCompletedEventArgs e)
  110. {
  111. //设置控件操作
  112. SetWinControlMeasureState(true);
  113. }
  114. #endregion
  115. private void FormHOZMain_Load(object sender, EventArgs e)
  116. {
  117. //加载控件的点击事件
  118. this.Click += new EventHandler(FormHOZMain_Click);
  119. plFill.Click += new EventHandler(FormHOZMain_Click);
  120. plTop.Click += new EventHandler(FormHOZMain_Click);
  121. plLeft.Click += new EventHandler(FormHOZMain_Click);
  122. plLeftContent.Click += new EventHandler(FormHOZMain_Click);
  123. pbImage.Click += new EventHandler(FormHOZMain_Click);
  124. //加载窗口移动事件
  125. this.MouseDown += new MouseEventHandler(FormHOZMain_MouseDown);
  126. //plFill.MouseDown += new MouseEventHandler(FormHOZMain_MouseDown);
  127. //plTop.MouseDown += new MouseEventHandler(FormHOZMain_MouseDown);
  128. //plLeft.MouseDown += new MouseEventHandler(FormHOZMain_MouseDown);
  129. //plLeftContent.MouseDown += new MouseEventHandler(FormHOZMain_MouseDown);
  130. //新建
  131. NewCreate();
  132. }
  133. #region 创建切孔列表信息
  134. /// <summary>
  135. /// 创建切孔列表信息
  136. /// </summary>
  137. /// <param name="ListCutHole"></param>
  138. public void CreateCutHoleList(List<CutHole> ListCutHole)
  139. {
  140. //清空左侧Panel中的切孔控件
  141. ClearPanelControls();
  142. for (int i = ListCutHole.Count - 1; i >= 0; i--)
  143. {
  144. UControl_CutHole ucCutHole = new UControl_CutHole(this);
  145. ucCutHole.Dock = DockStyle.Top;
  146. ucCutHole.CutHoleName = ListCutHole[i].HoleName;
  147. //显示切孔参数信息
  148. if (ucCutHole.UControl_ParaInfo == null)
  149. {
  150. ucCutHole.UControl_ParaInfo = new UControl_ParaInfo(this);
  151. }
  152. plPrarInfo.Width = ucCutHole.UControl_ParaInfo.Width;
  153. plPrarInfo.Height = ucCutHole.UControl_ParaInfo.Height;
  154. //设置当前样品的参数信息
  155. ucCutHole.UControl_ParaInfo.Name = ListCutHole[i].HoleName;
  156. ucCutHole.UControl_ParaInfo.CutHoleName = ListCutHole[i].HoleName;
  157. ucCutHole.UControl_ParaInfo.Position = ListCutHole[i].Position;
  158. ucCutHole.UControl_ParaInfo.StartTime = ListCutHole[i].START.ToString();
  159. ucCutHole.UControl_ParaInfo.EndTime = ListCutHole[i].END.ToString();
  160. ucCutHole.UControl_ParaInfo.State = ListCutHole[i].STATE.ToString();
  161. ucCutHole.UControl_ParaInfo.IsSwitch = ListCutHole[i].SWITCH;
  162. ucCutHole.UControl_ParaInfo.Dock = DockStyle.Fill;
  163. ucCutHole.UControl_ParaInfo.ShowParaInfo();
  164. plPrarInfo.Controls.Add(ucCutHole.UControl_ParaInfo);
  165. plLeftContent.Controls.Add(ucCutHole);
  166. }
  167. plPrarInfo.Visible = false;
  168. }
  169. #endregion
  170. //隐藏处理层
  171. private void FormHOZMain_Click(object sender, EventArgs e)
  172. {
  173. if (plPrarInfo.Visible)
  174. {
  175. plPrarInfo.Visible = false;
  176. }
  177. }
  178. #region 设置控件在线程过程中的编辑状态
  179. /// <summary>
  180. /// 设置控件在线程过程中的编辑状态
  181. /// </summary>
  182. /// <param name="cState"></param>
  183. private void SetWinControlMeasureState(bool cState)
  184. {
  185. pbNew.Enabled = cState;
  186. pbOpen.Enabled = cState;
  187. pbSave.Enabled = cState;
  188. pbInit.Enabled = cState;
  189. pbImportTemplateFile.Enabled = cState;
  190. pbLog.Enabled = cState;
  191. }
  192. #endregion
  193. #region 窗体 最大化 最小化 关闭 按钮事件
  194. private void pbMin_MouseEnter(object sender, EventArgs e)
  195. {
  196. this.pbMin.BackgroundImage = global::HOZProject.Properties.Resources.Min_Blue;
  197. }
  198. private void pbMin_MouseLeave(object sender, EventArgs e)
  199. {
  200. this.pbMin.BackgroundImage = global::HOZProject.Properties.Resources.Min_Gray;
  201. }
  202. private void pbMax_MouseEnter(object sender, EventArgs e)
  203. {
  204. this.pbMax.BackgroundImage = global::HOZProject.Properties.Resources.Max_Blue;
  205. }
  206. private void pbMax_MouseLeave(object sender, EventArgs e)
  207. {
  208. this.pbMax.BackgroundImage = global::HOZProject.Properties.Resources.Max_Gray;
  209. }
  210. private void pbClose_MouseEnter(object sender, EventArgs e)
  211. {
  212. this.pbClose.BackgroundImage = global::HOZProject.Properties.Resources.exit_Red;
  213. }
  214. private void pbClose_MouseLeave(object sender, EventArgs e)
  215. {
  216. this.pbClose.BackgroundImage = global::HOZProject.Properties.Resources.exit_Gray;
  217. }
  218. private void pbClose_Click(object sender, EventArgs e)
  219. {
  220. this.Close();
  221. }
  222. private void pbMin_Click(object sender, EventArgs e)
  223. {
  224. this.WindowState = FormWindowState.Minimized;
  225. }
  226. private void pbMax_Click(object sender, EventArgs e)
  227. {
  228. if (this.WindowState == FormWindowState.Maximized)
  229. {
  230. this.WindowState = FormWindowState.Normal;
  231. }
  232. else
  233. {
  234. this.WindowState = FormWindowState.Maximized;
  235. }
  236. //窗体据中
  237. this.StartPosition = FormStartPosition.CenterScreen;
  238. }
  239. #endregion
  240. #region 新建、保存、打开、初始化、导入配置、查看日志
  241. private void pbNew_Click(object sender, EventArgs e)
  242. {
  243. NewCreate();
  244. }
  245. private void NewCreate()
  246. {
  247. m_MeasureFile = new MeasureFile();
  248. if (!m_MeasureFile.New())
  249. {
  250. return;
  251. }
  252. else
  253. {
  254. //清空内容容器中的控件
  255. ClearPanelControls();
  256. }
  257. }
  258. private void pbSave_Click(object sender, EventArgs e)
  259. {
  260. if (m_MeasureFile == null)
  261. {
  262. MessageBox.Show("请新建一个测量文件");
  263. }
  264. else
  265. {
  266. m_MeasureFile.Save();
  267. //将初始化中的参数,配置到测量参数中
  268. m_MeasureFile.MParam = uControl_Init.GetMeasureParamInfo();
  269. }
  270. }
  271. private void pbOpen_Click(object sender, EventArgs e)
  272. {
  273. }
  274. private void pbInit_Click(object sender, EventArgs e)
  275. {
  276. if (uControl_Init == null)
  277. {
  278. uControl_Init = new UControl_Init(this);
  279. uControl_Init.ReloadConfig();
  280. }
  281. if (m_FormInit == null)
  282. {
  283. m_FormInit = new Form();
  284. }
  285. m_FormInit.StartPosition = FormStartPosition.CenterScreen;
  286. m_FormInit.FormBorderStyle = FormBorderStyle.None;
  287. m_FormInit.Width = uControl_Init.Width;
  288. m_FormInit.Height = uControl_Init.Height;
  289. if (m_FormInit.Controls.Count == 0)
  290. {
  291. m_FormInit.Controls.Add(uControl_Init);
  292. }
  293. m_FormInit.ShowDialog();
  294. }
  295. private void pbImportTemplateFile_Click(object sender, EventArgs e)
  296. {
  297. Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
  298. string m_TemplateFilePath = config.AppSettings.Settings["TemplateFilePath"].Value.ToString();
  299. //判断保存的路径是否存在
  300. if (!Directory.Exists(m_TemplateFilePath))
  301. {
  302. //创建路径
  303. Directory.CreateDirectory(m_TemplateFilePath);
  304. }
  305. //打开默认路径
  306. OpenFileDialog openFileDialog = new OpenFileDialog();
  307. //设置默认打开路径(绝对路径)
  308. openFileDialog.InitialDirectory = m_TemplateFilePath;
  309. openFileDialog.Filter = "样品参数文件|*.cfg";
  310. if (openFileDialog.ShowDialog() == DialogResult.OK)
  311. {
  312. if (uControl_Init == null)
  313. {
  314. uControl_Init = new UControl_Init(this);
  315. }
  316. //设置选择的模板文件
  317. uControl_Init.ReadConfigPath = openFileDialog.FileName;
  318. //获取文件
  319. uControl_Init.ReadConfigInfo();
  320. }
  321. }
  322. private void pbLog_Click(object sender, EventArgs e)
  323. {
  324. m_FormLog = new Form();
  325. m_FormLog.StartPosition = FormStartPosition.CenterScreen;
  326. UControl_Log uControl_Log = new UControl_Log();
  327. m_FormLog.FormBorderStyle = FormBorderStyle.None;
  328. m_FormLog.Width = uControl_Log.Width;
  329. m_FormLog.Height = uControl_Log.Height;
  330. uControl_Log.Name = "UControl_Log";
  331. //获取日志信息
  332. if (listmsg.Items.Count>0)
  333. {
  334. string[] strLog = new string[listmsg.Items.Count];
  335. for (int i = 0; i < listmsg.Items.Count; i++)
  336. {
  337. //赋值给数组
  338. strLog[i] = listmsg.Items[i].ToString();
  339. }
  340. uControl_Log.ShowProcessLogInfo(strLog);
  341. }
  342. m_FormLog.Controls.Add(uControl_Log);
  343. m_FormLog.ShowDialog();
  344. }
  345. //显示日志
  346. private void ShowLogInfo()
  347. {
  348. if (m_FormLog != null)
  349. {
  350. foreach (Control item in m_FormLog.Controls)
  351. {
  352. if (item is UserControl)
  353. {
  354. if (item.Name == "UControl_Log")
  355. {
  356. UControl_Log ucLog = (UControl_Log)item;
  357. //获取日志信息
  358. if (listmsg.Items.Count > 0)
  359. {
  360. string[] strLog = new string[listmsg.Items.Count];
  361. for (int i = 0; i < listmsg.Items.Count; i++)
  362. {
  363. //赋值给数组
  364. strLog[i] = listmsg.Items[i].ToString();
  365. }
  366. ucLog.ShowProcessLogInfo(strLog);
  367. }
  368. }
  369. }
  370. }
  371. }
  372. }
  373. #endregion
  374. #region 修改切孔状态
  375. /// <summary>
  376. /// 修改切孔状态
  377. /// </summary>
  378. /// <param name="cutHoleCode"></param>
  379. /// <param name="State"></param>
  380. private void ChangeCutHoleState(string CutHoleName, int State)
  381. {
  382. foreach (Control item in plLeftContent.Controls)
  383. {
  384. if (item is UserControl)
  385. {
  386. UControl_CutHole cutHole = (UControl_CutHole)item;
  387. if (cutHole.CutHoleName == CutHoleName)
  388. {
  389. Button btnCutHole = (Button)cutHole.Controls.Find("btnCutHole", false)[0];
  390. switch (State)
  391. {
  392. //开始运行
  393. case (int)ThreadState.InProcess:
  394. btnCutHole.BackColor = Color.Yellow;
  395. break;
  396. //完成
  397. case (int)ThreadState.Success:
  398. btnCutHole.BackColor = Color.GreenYellow;
  399. break;
  400. //错误
  401. case (int)ThreadState.Failed:
  402. btnCutHole.BackColor = Color.Red;
  403. break;
  404. }
  405. break;
  406. }
  407. }
  408. }
  409. }
  410. #endregion
  411. #region 拖动无窗体的控件
  412. [DllImport("user32.dll")]//拖动无窗体的控件
  413. public static extern bool ReleaseCapture();
  414. [DllImport("user32.dll")]
  415. public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);
  416. public const int WM_SYSCOMMAND = 0x0112;
  417. public const int SC_MOVE = 0xF010;
  418. public const int HTCAPTION = 0x0002;
  419. private void FormHOZMain_MouseDown(object sender, MouseEventArgs e)
  420. {
  421. if (this.WindowState == FormWindowState.Normal)
  422. {
  423. //拖动窗体
  424. ReleaseCapture();
  425. SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
  426. }
  427. }
  428. #endregion
  429. #region 开始、结束线程事件
  430. private void pbStart_Click(object sender, EventArgs e)
  431. {
  432. if (m_MeasureFile == null)
  433. {
  434. MessageBox.Show("请新建一个测量文件");
  435. //listmsg.Items.Clear();
  436. }
  437. else
  438. {
  439. if (m_BackgroundWorker.IsBusy)
  440. {
  441. MessageBox.Show("线程已经运行");
  442. return;
  443. }
  444. m_BackgroundWorker.RunWorkerAsync(this);
  445. }
  446. }
  447. private void pbStop_Click(object sender, EventArgs e)
  448. {
  449. if (m_BackgroundWorker.IsBusy)
  450. {
  451. m_BackgroundWorker.CancelAsync();
  452. }
  453. }
  454. #endregion
  455. #region 清空内容容器中的控件
  456. /// <summary>
  457. /// 清空内容容器中的控件
  458. /// </summary>
  459. private void ClearPanelControls()
  460. {
  461. //清空内容容器中的控件
  462. plLeftContent.Controls.Clear();
  463. plPrarInfo.Controls.Clear();
  464. }
  465. #endregion
  466. #region 测试修改切孔中流程状态
  467. private void button1_Click(object sender, EventArgs e)
  468. {
  469. if (plPrarInfo.Controls.Count > 0)
  470. {
  471. string name = textBox1.Text;
  472. string code = textBox2.Text;
  473. int state = Convert.ToInt32(comboBox1.Text);
  474. foreach (Control item in plPrarInfo.Controls)
  475. {
  476. if (item is UserControl)
  477. {
  478. if (item.Name == name)
  479. {
  480. UControl_ParaInfo uControl_ParaInfo = (UControl_ParaInfo)item;
  481. TimeLineItem[] ParaItem = uControl_ParaInfo.TlItem;
  482. foreach (TimeLineItem tlItem in ParaItem)
  483. {
  484. if (tlItem.Code == code)
  485. {
  486. tlItem.State = state;
  487. break;
  488. }
  489. }
  490. uControl_ParaInfo.TimeLineInvalidate();
  491. break;
  492. }
  493. }
  494. }
  495. }
  496. }
  497. #endregion
  498. }
  499. }