using FileManager; using MeasureData; using MeasureThread; using System; using System.Collections.Generic; using System.ComponentModel; using System.Configuration; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using static MeasureThread.ThreadStatusEventArgs; namespace HOZProject { public partial class FormHOZMain : Form { #region 控制窗体可以调整大小用 const int HTLEFT = 10; const int HTRIGHT = 11; const int HTTOP = 12; const int HTTOPLEFT = 13; const int HTTOPRIGHT = 14; const int HTBOTTOM = 15; const int HTBOTTOMLEFT = 0x10; const int HTBOTTOMRIGHT = 17; protected override void WndProc(ref Message m) { switch (m.Msg) { case 0x0084: base.WndProc(ref m); Point vPoint = new Point((int)m.LParam & 0xFFFF, (int)m.LParam >> 16 & 0xFFFF); vPoint = PointToClient(vPoint); if (vPoint.X <= 5) if (vPoint.Y <= 5) m.Result = (IntPtr)HTTOPLEFT; else if (vPoint.Y >= ClientSize.Height - 5) m.Result = (IntPtr)HTBOTTOMLEFT; else m.Result = (IntPtr)HTLEFT; else if (vPoint.X >= ClientSize.Width - 5) if (vPoint.Y <= 5) m.Result = (IntPtr)HTTOPRIGHT; else if (vPoint.Y >= ClientSize.Height - 5) m.Result = (IntPtr)HTBOTTOMRIGHT; else m.Result = (IntPtr)HTRIGHT; else if (vPoint.Y <= 5) m.Result = (IntPtr)HTTOP; else if (vPoint.Y >= ClientSize.Height - 5) m.Result = (IntPtr)HTBOTTOM; break; case 0x0201://鼠标左键按下的消息 m.Msg = 0x00A1;//更改消息为非客户区按下鼠标 m.LParam = IntPtr.Zero;//默认值 m.WParam = new IntPtr(2);//鼠标放在标题栏内 base.WndProc(ref m); break; default: base.WndProc(ref m); break; } } #endregion #region 成员变量 public BackgroundWorker m_BackgroundWorker;// 申明后台对象 /// /// 测量文件 /// public MeasureFile m_MeasureFile; /// 测量线程 public Measure m_Ms; /// /// 显示日志窗体 /// Form m_FormLog = null; /// /// 显示实例化窗体 /// FormMove m_FormInit = null; /// /// 是否已保存 /// public bool IsSave = false; /// /// 初始化用户控件 /// UControl_Init uControl_Init = null; /// /// 日志用户控件 /// UControl_Log ucLog = null; //流程控制 public int m_MeasureType = (int)MeasureMsgManage.measureType.FIB; //是否关闭窗体标识 public bool IsClose = false; Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); #endregion #region 构造函数 public FormHOZMain() { InitializeComponent(); //在线程操作过程中,可以设置控件属性 Control.CheckForIllegalCrossThreadCalls = false; m_BackgroundWorker = new BackgroundWorker(); // 实例化后台对象 m_BackgroundWorker.WorkerReportsProgress = true; // 设置可以通告进度 m_BackgroundWorker.WorkerSupportsCancellation = true; // 设置可以取消 m_BackgroundWorker.DoWork += new DoWorkEventHandler(DoWork); m_BackgroundWorker.ProgressChanged += new ProgressChangedEventHandler(UpdateProgress); m_BackgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(CompletedWork); LogManager.InitManulLog(); } #endregion #region 测量线程 void DoWork(object sender, DoWorkEventArgs e) { try { m_Ms = new Measure(ConfigurationManager.AppSettings["WebServerIP"].ToString(), ConfigurationManager.AppSettings["WebServerPort"].ToString(), ConfigurationManager.AppSettings["WebServerUrl"].ToString()); m_MeasureFile.MParam.AutoFocus.UP = Convert.ToSingle(ConfigurationManager.AppSettings["Focus_UP"].ToString()); m_MeasureFile.MParam.AutoFocus.Down = Convert.ToSingle(ConfigurationManager.AppSettings["Focus_Down"].ToString()); m_MeasureFile.MParam.AutoFocus.Step = Convert.ToSingle(ConfigurationManager.AppSettings["Focus_Step"].ToString()); m_MeasureFile.MParam.AutoFocus.Range = Convert.ToSingle(ConfigurationManager.AppSettings["Focus_Range"].ToString()); m_MeasureFile.MParam.AutoFocus.fStep = Convert.ToSingle(ConfigurationManager.AppSettings["Focus_FStep"].ToString()); m_MeasureFile.MParam.FIBFocus.UP = Convert.ToSingle(ConfigurationManager.AppSettings["FIB_UP"].ToString()); m_MeasureFile.MParam.FIBFocus.Down = Convert.ToSingle(ConfigurationManager.AppSettings["FIB_Down"].ToString()); m_MeasureFile.MParam.FIBFocus.Step = Convert.ToSingle(ConfigurationManager.AppSettings["FIB_Step"].ToString()); m_MeasureFile.MParam.FIBFocus.Range = Convert.ToSingle(ConfigurationManager.AppSettings["FIB_Range"].ToString()); m_MeasureFile.MParam.FIBFocus.fStep = Convert.ToSingle(ConfigurationManager.AppSettings["FIB_FStep"].ToString()); m_MeasureFile.MParam.AutoStigX.UP = Convert.ToSingle(ConfigurationManager.AppSettings["StigX_UP"].ToString()); m_MeasureFile.MParam.AutoStigX.Down = Convert.ToSingle(ConfigurationManager.AppSettings["StigX_Down"].ToString()); m_MeasureFile.MParam.AutoStigX.Step = Convert.ToSingle(ConfigurationManager.AppSettings["StigX_Step"].ToString()); m_MeasureFile.MParam.AutoStigX.Range = Convert.ToSingle(ConfigurationManager.AppSettings["StigX_Range"].ToString()); m_MeasureFile.MParam.AutoStigX.fStep = Convert.ToSingle(ConfigurationManager.AppSettings["StigX_FStep"].ToString()); m_MeasureFile.MParam.AutoStigY.UP = Convert.ToSingle(ConfigurationManager.AppSettings["StigY_UP"].ToString()); m_MeasureFile.MParam.AutoStigY.Down = Convert.ToSingle(ConfigurationManager.AppSettings["StigY_Down"].ToString()); m_MeasureFile.MParam.AutoStigY.Step = Convert.ToSingle(ConfigurationManager.AppSettings["StigY_Step"].ToString()); m_MeasureFile.MParam.AutoStigY.Range = Convert.ToSingle(ConfigurationManager.AppSettings["StigY_Range"].ToString()); m_MeasureFile.MParam.AutoStigY.fStep = Convert.ToSingle(ConfigurationManager.AppSettings["StigY_FStep"].ToString()); m_Ms.X_Min = Convert.ToSingle(ConfigurationManager.AppSettings["X_Min"]); m_Ms.X_Max = Convert.ToSingle(ConfigurationManager.AppSettings["X_Max"]); m_Ms.Y_Min = Convert.ToSingle(ConfigurationManager.AppSettings["Y_Min"]); m_Ms.Y_Max = Convert.ToSingle(ConfigurationManager.AppSettings["Y_Max"]); m_Ms.Z_Min = Convert.ToSingle(ConfigurationManager.AppSettings["Z_Min"]); m_Ms.Z_Max = Convert.ToSingle(ConfigurationManager.AppSettings["Z_Max"]); m_Ms.T_Min = Convert.ToSingle(ConfigurationManager.AppSettings["T_Min"]); m_Ms.T_Max = Convert.ToSingle(ConfigurationManager.AppSettings["T_Max"]); m_Ms.R_Min = Convert.ToSingle(ConfigurationManager.AppSettings["R_Min"]); m_Ms.R_Max = Convert.ToSingle(ConfigurationManager.AppSettings["R_Max"]); m_Ms.M_Min = Convert.ToSingle(ConfigurationManager.AppSettings["M_Min"]); m_Ms.M_Max = Convert.ToSingle(ConfigurationManager.AppSettings["M_Max"]); //人工干预 m_Ms.hand_intervene = Convert.ToInt32(ConfigurationManager.AppSettings["Hand_Intervene"]); //SmartSEM远程路径 m_Ms.RemoteELYPath = ConfigurationManager.AppSettings["RemoteELYPath"]; m_Ms.RemoteMLFPath = ConfigurationManager.AppSettings["RemoteMLFPath"]; //Z轴移动距离 m_MeasureFile.MParam.ZDistance= Convert.ToSingle(ConfigurationManager.AppSettings["ZDistance"]); m_Ms.InitMeas(m_MeasureFile); //注册事件 m_Ms.SendThreadStatus += new ThreadStatusHandler(displayMessage); //注册事件 m_Ms.SendCutHolesStatus += new CutHolesStatusHandler(displayCutHoleMessage); //设置控件操作 SetWinControlMeasureState(false); //自动测量的全过程 m_Ms.DoMeasure(); } catch (Exception ex) { LogManager.LogError(ex.ToString()); } } public void displayMessage(object sender, ThreadStatusEventArgs e) { //主界面显示内容 this.BeginInvoke((Action)delegate { this.listmsg.Items.Add(e.HoleName +"_" + e.Time.ToString() + "_"+ e.Message + "_" + e.State ); //显示流程中对应编号的内容 MeasureMsgManage.ShowMsgContent(this, e); AddLogListInfo(e); }); } public void displayCutHoleMessage(object sender, CutHolesStatusEventArgs e) { //主界面显示内容 this.BeginInvoke((Action)delegate { //修改切孔状态 ChangeCutHoleState(e.HoleName.ToString(), Convert.ToInt32(e.State)); }); } void UpdateProgress(object sender, ProgressChangedEventArgs e) { } void CompletedWork(object sender, RunWorkerCompletedEventArgs e) { //设置控件操作 MessageBox.Show("测量已完成!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); SetWinControlMeasureState(true); } #endregion #region 窗体加载 private void FormHOZMain_Load(object sender, EventArgs e) { //加载控件的点击事件 this.Click += new EventHandler(FormHOZMain_Click); plFill.Click += new EventHandler(FormHOZMain_Click); plTop.Click += new EventHandler(FormHOZMain_Click); plLeft.Click += new EventHandler(FormHOZMain_Click); plLeftContent.Click += new EventHandler(FormHOZMain_Click); pbImage.Click += new EventHandler(FormHOZMain_Click); //加载窗口移动事件 this.MouseDown += new MouseEventHandler(FormHOZMain_MouseDown); //新建 NewCreate(); //实例初始化窗体对象 if (uControl_Init == null) { uControl_Init = new UControl_Init(this); uControl_Init.ReloadConfig(); } } #endregion #region 创建切孔列表信息 /// /// 创建切孔列表信息 /// /// public void CreateCutHoleList(List ListCutHole) { //清空左侧Panel中的切孔控件 ClearPanelControls(); for (int i = ListCutHole.Count - 1; i >= 0; i--) { UControl_CutHole ucCutHole = new UControl_CutHole(this); ucCutHole.Dock = DockStyle.Top; ucCutHole.CutHoleName = ListCutHole[i].HoleName; //显示切孔参数信息 if (ucCutHole.UControl_ParaInfo == null) { ucCutHole.UControl_ParaInfo = new UControl_ParaInfo(this); } plPrarInfo.Width = ucCutHole.UControl_ParaInfo.Width; plPrarInfo.Height = ucCutHole.UControl_ParaInfo.Height; //设置当前样品的参数信息 string CutHoleName = ListCutHole[i].HoleName; ucCutHole.UControl_ParaInfo.Name = CutHoleName; ucCutHole.UControl_ParaInfo.CutHoleName = CutHoleName; ucCutHole.UControl_ParaInfo.Position = ListCutHole[i].Position; ucCutHole.UControl_ParaInfo.StartTime = ListCutHole[i].START.ToString(); ucCutHole.UControl_ParaInfo.EndTime = ListCutHole[i].END.ToString(); int state = (int)ListCutHole[i].STATE; ucCutHole.UControl_ParaInfo.State = state; ucCutHole.UControl_ParaInfo.IsSwitch = ListCutHole[i].SWITCH; ucCutHole.UControl_ParaInfo.Dock = DockStyle.Fill; ucCutHole.UControl_ParaInfo.ShowParaInfo(); plPrarInfo.Controls.Add(ucCutHole.UControl_ParaInfo); plLeftContent.Controls.Add(ucCutHole); ChangeCutHoleState(CutHoleName, state); } plPrarInfo.Visible = false; } #endregion #region 隐藏处理层 //隐藏处理层 private void FormHOZMain_Click(object sender, EventArgs e) { if (plPrarInfo.Visible) { plPrarInfo.Visible = false; } } #endregion #region 设置控件在线程过程中的编辑状态 /// /// 设置控件在线程过程中的编辑状态 /// /// public void SetWinControlMeasureState(bool cState) { pbNew.Enabled = cState; pbOpen.Enabled = cState; pbSave.Enabled = cState; pbInit.Enabled = cState; pbImportTemplateFile.Enabled = cState; //pbLog.Enabled = cState; pbStart.Enabled = cState; pbStop.Enabled = !cState; //设置切孔是否执行 foreach (Control item in plPrarInfo.Controls) { if (item is UserControl) { UControl_ParaInfo ucParaInfo = (UControl_ParaInfo)item; ucParaInfo.CkIsSwitch.Enabled = cState; } } } #endregion #region 窗体中 线程开始 停止 最大化 最小化 关闭 按钮事件 private void pbMin_MouseEnter(object sender, EventArgs e) { this.pbMin.BackgroundImage = global::HOZProject.Properties.Resources.Min; } private void pbMin_MouseLeave(object sender, EventArgs e) { this.pbMin.BackgroundImage = global::HOZProject.Properties.Resources.Min; } private void pbMax_MouseEnter(object sender, EventArgs e) { this.pbMax.BackgroundImage = global::HOZProject.Properties.Resources.Max; } private void pbMax_MouseLeave(object sender, EventArgs e) { this.pbMax.BackgroundImage = global::HOZProject.Properties.Resources.Max; } private void pbClose_MouseEnter(object sender, EventArgs e) { this.pbClose.BackgroundImage = global::HOZProject.Properties.Resources.Exit; } private void pbClose_MouseLeave(object sender, EventArgs e) { this.pbClose.BackgroundImage = global::HOZProject.Properties.Resources.Exit; } private void pbStart_MouseEnter(object sender, EventArgs e) { this.pbStart.BackgroundImage = global::HOZProject.Properties.Resources.StartLeave; } private void pbStart_MouseLeave(object sender, EventArgs e) { this.pbStart.BackgroundImage = global::HOZProject.Properties.Resources.StartLeave; } private void pbStop_MouseEnter(object sender, EventArgs e) { this.pbStop.BackgroundImage = global::HOZProject.Properties.Resources.StopLeave; } private void pbStop_MouseLeave(object sender, EventArgs e) { this.pbStop.BackgroundImage = global::HOZProject.Properties.Resources.StopLeave; } private void pbClose_Click(object sender, EventArgs e) { try { if (m_Ms != null) { if (m_BackgroundWorker.IsBusy) { if (MessageBox.Show("当前测量正在运行,是否关闭此窗体?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { //线程停止变量 m_Ms.key_stop = true; IsClose = true; lblStateMessage.Text = "正在关闭窗体...请等待"; pbClose.Enabled = false; } return; } } if (MessageBox.Show("是否关闭此窗体?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { m_MeasureFile.Save(); this.Close(); } } catch (Exception ex) { LogManager.LogError(ex.Message); } } private void pbMin_Click(object sender, EventArgs e) { this.WindowState = FormWindowState.Minimized; } private void pbMax_Click(object sender, EventArgs e) { if (this.WindowState == FormWindowState.Maximized) { this.WindowState = FormWindowState.Normal; } else { this.WindowState = FormWindowState.Maximized; } //窗体据中 this.StartPosition = FormStartPosition.CenterScreen; } #endregion #region 新建、保存、打开、初始化、导入配置、查看日志 private void pbNew_Click(object sender, EventArgs e) { NewCreate(); } private void NewCreate() { m_MeasureFile = new MeasureFile(); if (!m_MeasureFile.New()) { return; } else { //清空内容容器中的控件 ClearPanelControls(); } //实例初始化窗体对象 if (uControl_Init == null) { uControl_Init = new UControl_Init(this); uControl_Init.ReloadConfig(); } m_MeasureFile.MParam = uControl_Init.GetMeasureParam(); } private void pbSave_Click(object sender, EventArgs e) { if (m_MeasureFile == null) { MessageBox.Show("请新建一个测量文件!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { //保存测量文件 if (m_MeasureFile.SaveAs()) { //获取测量文件所在路径 string savePath = m_MeasureFile.FilePath; //数据库名称 string dbFileName = "MeasureFile.db"; //要复制的文件路径 string pLocalFilePath = Application.StartupPath +"\\"+dbFileName; string pSaveFilePath = savePath + "\\" + dbFileName;//指定存储的路径 if (File.Exists(pLocalFilePath))//必须判断要复制的文件是否存在 { //三个参数分别是源文件路径,存储路径,若存储路径有相同文件是否替换 File.Copy(pLocalFilePath, pSaveFilePath, true); } //将初始化中的参数,配置到测量参数中 m_MeasureFile.MParam = uControl_Init.GetMeasureParamInfo(); //设置已保存状态 IsSave = true; } } } private void pbOpen_Click(object sender, EventArgs e) { try { //打开默认路径 OpenFileDialog openFileDialog = new OpenFileDialog(); //设置筛选文件格式 openFileDialog.Filter = "测量文件(*.msf)|*.msf"; if (openFileDialog.ShowDialog() == DialogResult.OK) { //读取文件 string measureFileNamePath = openFileDialog.FileName; m_MeasureFile.FileName = measureFileNamePath; m_MeasureFile.Open(); List ListCutHole = m_MeasureFile.ListCutHole; //文件路径 string CutHoleFilePath = m_MeasureFile.CutHoleFilePath; CreateCutHoleList(ListCutHole); ////保存测量文件 //m_MeasureFile.Save(); //设置已保存状态 IsSave = true; } } catch (Exception ex) { LogManager.LogError(ex.Message); } } private void pbInit_Click(object sender, EventArgs e) { if (uControl_Init == null) { uControl_Init = new UControl_Init(this); uControl_Init.ReloadConfig(); } if (m_FormInit == null) { m_FormInit = new FormMove(); } m_FormInit.StartPosition = FormStartPosition.CenterScreen; m_FormInit.FormBorderStyle = FormBorderStyle.None; m_FormInit.Width = uControl_Init.Width + 20; m_FormInit.Height = uControl_Init.Height + 20; if (m_FormInit.Controls.Count == 0) { uControl_Init.Location = new Point(10,10); m_FormInit.Controls.Add(uControl_Init); } m_FormInit.ShowDialog(); } private void pbImportTemplateFile_Click(object sender, EventArgs e) { Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); string m_TemplateFilePath = config.AppSettings.Settings["TemplateFilePath"].Value.ToString(); //判断保存的路径是否存在 if (!Directory.Exists(m_TemplateFilePath)) { ////创建路径 //Directory.CreateDirectory(m_TemplateFilePath); FolderBrowserDialog dialog = new FolderBrowserDialog(); dialog.Description = "请选择文件路径"; //dialog.RootFolder = Environment.SpecialFolder.Programs; if (dialog.ShowDialog() == DialogResult.OK) { m_TemplateFilePath = dialog.SelectedPath; config.AppSettings.Settings["TemplateFilePath"].Value = m_TemplateFilePath; config.Save(ConfigurationSaveMode.Modified); ConfigurationManager.RefreshSection("appSettings");//重新加载新的配置文件 } } //打开默认路径 OpenFileDialog openFileDialog = new OpenFileDialog(); //设置默认打开路径(绝对路径) openFileDialog.InitialDirectory = m_TemplateFilePath; openFileDialog.Filter = "样品参数文件|*.cfg"; if (openFileDialog.ShowDialog() == DialogResult.OK) { if (uControl_Init == null) { uControl_Init = new UControl_Init(this); } //设置选择的模板文件 uControl_Init.ReadConfigPath = openFileDialog.FileName; //获取文件 uControl_Init.ReadConfigInfo(); } } private void pbLog_Click(object sender, EventArgs e) { m_FormLog = new Form(); m_FormLog.StartPosition = FormStartPosition.CenterScreen; if (ucLog == null) { ucLog = new UControl_Log(); } m_FormLog.FormBorderStyle = FormBorderStyle.None; m_FormLog.Width = ucLog.Width; m_FormLog.Height = ucLog.Height; ucLog.Name = "UControl_Log"; //获取日志信息 if (listmsg.Items.Count>0) { string[] strLog = new string[listmsg.Items.Count]; for (int i = 0; i < listmsg.Items.Count; i++) { //赋值给数组 strLog[i] = listmsg.Items[i].ToString(); } ucLog.ShowProcessLogInfo(strLog); } m_FormLog.Controls.Add(ucLog); m_FormLog.ShowDialog(); } //显示日志 private void AddLogListInfo(ThreadStatusEventArgs e) { if (m_FormLog != null) { foreach (Control item in m_FormLog.Controls) { if (item is UserControl) { if (item.Name == "UControl_Log") { ucLog = (UControl_Log)item; //获取日志信息 if (listmsg.Items.Count > 0) { string[] strLog = new string[listmsg.Items.Count]; for (int i = 0; i < listmsg.Items.Count; i++) { //赋值给数组 strLog[i] = listmsg.Items[i].ToString(); } ucLog.ShowProcessLogInfo(strLog); } } } } } } #endregion #region 修改切孔状态 /// /// 修改切孔状态 /// /// /// public void ChangeCutHoleState(string CutHoleName, int States) { foreach (Control item in plLeftContent.Controls) { if (item is UserControl) { UControl_CutHole cutHole = (UControl_CutHole)item; if (cutHole.CutHoleName == CutHoleName) { Button btnCutHole = (Button)cutHole.Controls.Find("btnCutHole", false)[0]; switch (States) { //运行中 case (int)ThreadState.InProcess: //btnCutHole.BackColor = Color.Yellow; btnCutHole.BackgroundImage = Properties.Resources.CutHole_Yellow; btnCutHole.BackgroundImageLayout = ImageLayout.Center; ChangeCutHoleMeasureState(CutHoleName, States); break; //等待 case (int)ThreadState.Waiting: //btnCutHole.BackColor = Color.Yellow; btnCutHole.BackgroundImage = Properties.Resources.CutHole_Yellow; btnCutHole.BackgroundImageLayout = ImageLayout.Center; ChangeCutHoleMeasureState(CutHoleName, States); break; //准备 case (int)ThreadState.Ready: //btnCutHole.BackColor = Color.White; btnCutHole.BackgroundImage = Properties.Resources.CutHole_Gray; btnCutHole.BackgroundImageLayout = ImageLayout.Center; ChangeCutHoleMeasureState(CutHoleName, States); break; //失败 case (int)ThreadState.Failed: //btnCutHole.BackColor = Color.Red; btnCutHole.BackgroundImage = Properties.Resources.CutHole_Red; btnCutHole.BackgroundImageLayout = ImageLayout.Center; ChangeCutHoleMeasureState(CutHoleName, States); break; //完成 case (int)ThreadState.Success: //btnCutHole.BackColor = Color.GreenYellow; btnCutHole.BackgroundImage = Properties.Resources.CutHole_Green; btnCutHole.BackgroundImageLayout = ImageLayout.Center; //修改切孔状态 ChangeCutHoleMeasureState(CutHoleName, States); break; } break; } } } } #endregion #region 修改切孔状态 public void ChangeCutHoleMeasureState(string CutHoleName, int States) { if (plPrarInfo.Controls.Count > 0) { foreach (Control item in plPrarInfo.Controls) { if (item is UserControl) { if (item.Name == CutHoleName) { UControl_ParaInfo uControl_ParaInfo = (UControl_ParaInfo)item; //获取切孔列表 List aCutHole = m_MeasureFile.ListCutHole; foreach (CutHole cutHoleItem in aCutHole) { if (cutHoleItem.HoleName == CutHoleName) { //设置开始时间与结束时间 uControl_ParaInfo.StartTime = cutHoleItem.START.ToString(); uControl_ParaInfo.EndTime = cutHoleItem.END.ToString(); uControl_ParaInfo.ShowTime(); break; } } switch (States) { //准备 case (int)ThreadState.Ready: //修改切孔状态 uControl_ParaInfo.lblShowState.Text = "准备"; break; //等待 case (int)ThreadState.Waiting: //修改切孔状态 uControl_ParaInfo.lblShowState.Text = "等待"; break; //进行中 case (int)ThreadState.InProcess: //修改切孔状态 uControl_ParaInfo.lblShowState.Text = "进行中"; break; //完成 case (int)ThreadState.Success: //修改切孔状态 uControl_ParaInfo.lblShowState.Text = "完成"; break; //失败 case (int)ThreadState.Failed: uControl_ParaInfo.lblShowState.Text = "失败"; uControl_ParaInfo.pbMeasure.Value = 100; uControl_ParaInfo.lblCompletedAmount.Text = "100%"; break; } break; } } } } } #endregion #region 拖动无窗体的控件 [DllImport("user32.dll")]//拖动无窗体的控件 public static extern bool ReleaseCapture(); [DllImport("user32.dll")] public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam); public const int WM_SYSCOMMAND = 0x0112; public const int SC_MOVE = 0xF010; public const int HTCAPTION = 0x0002; private void FormHOZMain_MouseDown(object sender, MouseEventArgs e) { if (this.WindowState == FormWindowState.Normal) { //拖动窗体 ReleaseCapture(); SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0); } } #endregion #region 开始、结束线程事件 private void pbStart_Click(object sender, EventArgs e) { if (plLeftContent.Controls.Count==0) { MessageBox.Show("请添加切孔信息!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } if (IsSave) { if (m_BackgroundWorker.IsBusy) { MessageBox.Show("线程已经运行!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } if (MessageBox.Show("是否开始测量!", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes) { m_BackgroundWorker.RunWorkerAsync(this); } } else { MessageBox.Show("请保存当前测量文件", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } } private void pbStop_Click(object sender, EventArgs e) { if (m_Ms != null) { if (MessageBox.Show("是否停止当前测量?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question)== DialogResult.Yes) { //线程停止变量 m_Ms.key_stop = true; } } } #endregion #region 清空内容容器中的控件 /// /// 清空内容容器中的控件 /// private void ClearPanelControls() { //清空内容容器中的控件 plLeftContent.Controls.Clear(); plPrarInfo.Controls.Clear(); } /// /// 清空日志控件内容 /// private void ClearContrlsContent() { try { if (ucLog != null) { if (ucLog.dgvLog != null) { if (ucLog.dgvLog.Rows.Count > 0) { ucLog.dgvLog.Rows.Clear(); } } } if (listmsg != null) { if (listmsg.Items.Count > 0) { listmsg.Items.Clear(); } } } catch (Exception ex) { LogManager.LogError(ex.Message); } } #endregion #region 测试修改切孔中流程状态 private void button1_Click(object sender, EventArgs e) { if (plPrarInfo.Controls.Count > 0) { string name = textBox1.Text; string code = textBox2.Text; bool state = Convert.ToBoolean(comboBox1.Text); foreach (Control item in plPrarInfo.Controls) { if (item is UserControl) { if (item.Name == name) { UControl_ParaInfo uControl_ParaInfo = (UControl_ParaInfo)item; TimeLineItem[] ParaItem = uControl_ParaInfo.TlItem; foreach (TimeLineItem tlItem in ParaItem) { if (tlItem.Code == code) { tlItem.State = Convert.ToInt32(state); break; } } uControl_ParaInfo.TimeLineInvalidate(); break; } } } } } #endregion private void FormHOZMain_Resize(object sender, EventArgs e) { plMain.Left = 12; plMain.Top = 12; plMain.Width = this.Width - 24; plMain.Height = this.Height - 24; plFill.Width = plMain.Width - plLeft.Width - 4; plFill.Height = plMain.Height - plTop.Height - 4; plFill.Left = plLeft.Width + 4; plFill.Top = plTop.Height + 4; } } }