using System; using System.Collections.Generic; using System.Data; using System.Drawing; using System.Windows.Forms; using OTS.WinFormsUI.Docking; using System.IO; using System.Collections; using OTSDataType; using OTSModelSharp; namespace OTSMeasureApp { public partial class OTSMeasureResultWindow : DockContent { #region 全局变量 OTSIncAMeasureAppForm m_MeasureAppForm; //进度条最大值 int m_MaxValue = 100; //进度条最小值 int m_MinValue = 0; //步长 int m_Step = 1; //文件名称 private string m_fileName = string.Empty; private bool m_resetText = true; //国际化 OTSCommon.Language lan; Hashtable table; NLog.Logger log ; #endregion public OTSMeasureResultWindow(OTSIncAMeasureAppForm MeasureAppForm) { InitializeComponent(); m_MeasureAppForm = MeasureAppForm; //国际化 lan = new OTSCommon.Language(this); table = lan.GetNameTable(this.Name); } public string FileName { get { return m_fileName; } set { if (value != string.Empty) { Stream s = new FileStream(value, FileMode.Open); FileInfo efInfo = new FileInfo(value); string fext = efInfo.Extension.ToUpper(); s.Close(); } m_fileName = value; this.ToolTipText = value; } } protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); if (m_resetText) { m_resetText = false; FileName = FileName; } } protected override string GetPersistString() { String stName = GetType().ToString() + "," + FileName + "," + Text; return stName; } protected override void OnTextChanged(EventArgs e) { base.OnTextChanged(e); if (FileName == string.Empty) { //this.richTextBox1.Text = Text; return; } } private void OTSMeasureResultWindow_Load(object sender, EventArgs e) { this.dg_Info.AutoResizeColumns(); //创建列 this.dg_Info.AutoGenerateColumns = false; CheckForIllegalCrossThreadCalls = false; log = NLog.LogManager.GetCurrentClassLogger(); for(int i=0;i< dg_Info.ColumnCount;i++) { dg_Info.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable; } dg_Info.RowHeadersDefaultCellStyle.Padding = new Padding(dg_Info.RowHeadersWidth); } private void OTSMeasureResultWindow_SizeChanged(object sender, EventArgs e) { //获取屏幕的宽度与高度 int width = this.Width; int height = this.Height; } /// /// 设置当前进度信息(当前帧图数量 总数) /// /// /// /// public bool SetCurrentProgressInfo(int CompleteFieldCount, int MeasureFieldTotalCount, int ParticleCount) { //设置进度条最大、最小、步长值 PBState.Minimum = m_MinValue; PBState.Maximum = m_MaxValue; PBState.Step = m_Step; int currentProgress = m_MinValue; int currentMeasureCountAdd = CompleteFieldCount; //设置当前帧图数 lblFieldCount.Text = CompleteFieldCount.ToString(); if (currentMeasureCountAdd <= MeasureFieldTotalCount) { currentProgress = (currentMeasureCountAdd) * 100 / MeasureFieldTotalCount; } //设置当前进度值 if (currentProgress < 100) { PBState.Value = currentProgress; lblProgressInfo.Text = currentProgress + "%"; } else { lblProgressInfo.Text = currentProgress + "%"; PBState.Value = 100; } //设置颗粒数量 int pCount = ParticleCount; lblParticleCount.Text = (pCount).ToString(); return false; } /// /// 初始化 点击主窗体中新建按钮 /// /// public bool SetInit() { lblSampleName.Text = string.Empty; lblMeasureTime.Text = string.Empty; lblParticleCount.Text = string.Empty; lblBeginTime.Text = string.Empty; lblFieldCount.Text = string.Empty; lblProgressInfo.Text = "0%"; PBState.Value = 0; dg_Info.DataSource = null; return true; } #region 显示操作 /// /// 设置样品名称 /// /// public void SetSampleName(string sampleName) { //设置样品名称 if (sampleName != null) { if (sampleName != "") { lblSampleName.Text = sampleName; } } } /// /// 设置开始时间 /// /// public void SetStartTime(string startTime) { if (startTime != null) { if (startTime != "") { try { //设置开始时间 lblBeginTime.Text = startTime; } catch (Exception) { lblBeginTime.Text = ""; } } } } /// /// 设置结束时间 /// /// public void CloseProgressWindow() { //this.Dispose(); this.Close(); } #endregion private void OTSMeasureResultWindow_FormClosing(object sender, FormClosingEventArgs e) { } #region 设置当前测量用时 /// /// 设置当前测量用时 /// /// 时间间隔对象 public void SetMeasureTime(TimeSpan ts) { //这样就能得到天数、小时、分差 string str1 = string.Empty; if (ts.Days > 0) { string str = table["str1"].ToString(); str1 += ts.Days + str; } if (ts.Hours > 0) { string str = table["str2"].ToString(); str1 += ts.Hours + str; } if (ts.Minutes > 0) { string str = table["str3"].ToString(); str1 += ts.Minutes + str; } if (ts.Seconds > 0) { string str = table["str4"].ToString(); str1 += ts.Seconds + str; } //所有时间换去 总计天数、小时、分钟 lblMeasureTime.Text = str1; } #endregion #region 设置当前测量列表 /// /// 设置当前测量用时 /// /// 时间间隔对象 public void SetMeasureListInfo(IList list) { try { //颗粒类型数量 int IParticleTypeAmount = 0; //颗粒总数量 int IParticleAmount = 0; //颗粒面积总数量 double dAreaAmount = 0; COTSSample WSample = m_MeasureAppForm.m_ProjParam.GetWorkSample(); //list 序列化 DataTable DataTable dt = ListConvertToDT(list); if (dt != null) { if (dt.Rows.Count > 0) { IParticleTypeAmount = dt.Rows.Count; string stdName = string.Empty; for (int i = 0; i < dt.Rows.Count; i++) { stdName = string.Empty; int STDID = Convert.ToInt32(dt.Rows[i]["TypeId"].ToString()); IParticleAmount += Convert.ToInt32(dt.Rows[i]["Number"].ToString()); dAreaAmount += Convert.ToDouble(dt.Rows[i]["Area"].ToString()); } //添加统计行信息 DataRow dr = dt.NewRow(); dr["TypeId"] = ""; dr["STDName"] = ""; string str = table["str6"].ToString(); dr["Number"] = str + IParticleAmount; str = table["str7"].ToString(); dr["Area"] = str + dAreaAmount; dt.Rows.Add(dr); } dg_Info.DataSource = dt; } } catch (Exception ex) { string str = table["str8"].ToString(); log.Trace(str + ex.ToString()); } } #endregion #region List转换为DataTable /// /// 将集合类转换成DataTable /// /// 集合 /// public static DataTable ListConvertToDT(IList list) { DataTable result = new DataTable(); result.Columns.Add("TypeId"); result.Columns.Add("Number"); result.Columns.Add("Area"); result.Columns.Add("STDName"); if (list == null) { return null; } if (list.Count > 0) { for (int i = 0; i < list.Count; i++) { CMsrResultItem cMsrResultItemClr = (CMsrResultItem)list[i]; DataRow dr = result.NewRow(); dr[0] = cMsrResultItemClr.GetTypeId(); dr[1] = cMsrResultItemClr.GetNumber(); dr[2] = Math.Round(Convert.ToDouble(cMsrResultItemClr.GetArea()),2); dr[3] = cMsrResultItemClr.GetName(); result.Rows.Add(dr); } } return result; } #endregion public void UpdateResultInfoBySampleName(string sampleName) { COTSSample sample = m_MeasureAppForm.m_ProjParam.GetResultData().GetSampleByName(sampleName); //设置当前样品名称 SetSampleName(sampleName); //已完成的数量 int CompleteFieldCount = sample.GetMsrStatus().GetCompletedFields(); int MeasureFieldTotalCount = (int)sample.GetMsrStatus().GetCompletedFields(); int ParticleCount = 0; if (CompleteFieldCount > 0) { //设置完成数量 颗粒数量 SetCurrentProgressInfo(CompleteFieldCount, MeasureFieldTotalCount, ParticleCount); //设置开始、测量时间 string startTime = sample.GetMsrStatus().GetStartTime().ToString(); //开始时间 SetStartTime(startTime); TimeSpan usedTimeTS = sample.GetMsrStatus().GetUsedTime(); //获取测量时间 SetMeasureTime(usedTimeTS); //获取结果文件 颗粒列表信息 List cMsrResultItemClrList = sample.GetMsrResults().GetResultItems(); //设置测量状态数据列表 SetMeasureListInfo(cMsrResultItemClrList); } else { SetInit(); } } private void PBState_SizeChanged(object sender, EventArgs e) { //每次在进度条尺寸更变的时候 将进度内容位置设置在进度条位置中心 lblProgressInfo.Location = new Point(PBState.Location.X + (PBState.Width), lblProgressInfo.Location.Y); } } }