using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Management; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Xml; namespace OTSExtremum { public partial class ExtremumApp : Form { public ExtremumApp() { InitializeComponent(); } int groupCount = 0; GroupBox gp; #region 单组数据操作方法 //分类 int typeIndex = 0; /// /// 添加颗粒直径 /// /// /// private void btnAddValue_Click(object sender, EventArgs e) { AddVale(panel1); } /// /// 添加测量结果文件 /// /// /// private void btnAddFile_Click(object sender, EventArgs e) { System.Windows.Forms.FolderBrowserDialog dialog = new System.Windows.Forms.FolderBrowserDialog(); dialog.Description = "请选择测量结果所在文件夹"; if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) { ScanFile(dialog.SelectedPath,panel1); } } /// /// 删除颗粒 /// /// /// private void btnDel_Click(object sender, EventArgs e) { DialogResult dr = MessageBox.Show("是否确认删除?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); if (dr == DialogResult.No) { return; } DelVale(panel1); } /// /// 检验数据有效性,是否位离群值 /// /// /// private void btnCheck_Click(object sender, EventArgs e) { CheckVale(panel1); } /// /// 极值分析 /// /// /// private void btnCompute_Click(object sender, EventArgs e) { int chkcount = panel1.Controls.Count; double[] vs = new double[chkcount]; double[] gg = { 140, 240, 532, 205, 150, 110, 200, 180, 220, 300, 70, 390, 100, 90, 320, 190, 250, 150, 280, 250, 490, 120, 500, 200 }; for (int i = 0; i < chkcount; i++) { vs[i] = Convert.ToDouble(((CheckBox)panel1.Controls[i]).Text); } if (!CheckVale(panel1,1)) { return; } GridForm gridForm = new GridForm(vs, panel1.Controls[0].Text); gridForm.Show(); } /// /// 选择分类A /// /// /// private void gbflA_Click(object sender, EventArgs e) { typeIndex = 0; this.rbbtntype.Image = Properties.Resources.A1; ListChangedType(); } /// /// 选择分类B /// /// /// private void gbflB_Click(object sender, EventArgs e) { typeIndex = 1; this.rbbtntype.Image = Properties.Resources.B; ListChangedType(); } /// /// 选择分类C /// /// /// private void gbflC_Click(object sender, EventArgs e) { typeIndex = 2; this.rbbtntype.Image = Properties.Resources.C1; ListChangedType(); } /// /// 选择分类D /// /// /// private void gbflD_Click(object sender, EventArgs e) { typeIndex = 3; this.rbbtntype.Image = Properties.Resources.D; ListChangedType(); } /// /// 选择分类DS /// /// /// private void gbflDS_Click(object sender, EventArgs e) { typeIndex = 4; this.rbbtntype.Image = Properties.Resources.DS; ListChangedType(); } /// /// 分类改变后测量结果改变 /// private void ListChangedType() { foreach (var item in panel1.Controls) { CheckBox check = (CheckBox)item; if (check.Tag.GetType().Name == "Double[]") { double[] list = (double[])check.Tag; check.Text = Math.Round(list[typeIndex], 2).ToString(); } } } #endregion #region 多组数据操作 /// /// 添加分组 /// /// /// private void btnGroup_Click(object sender, EventArgs e) { string strTemp = string.Empty; InputText inputDialog = new InputText(); inputDialog.TextHandler = (str) => { strTemp = str; }; inputDialog.StartPosition = FormStartPosition.CenterParent; DialogResult result = inputDialog.ShowDialog(); if (string.IsNullOrEmpty(strTemp)) { return; } GroupBox group = new GroupBox(); group.Width = panel2.Width - 20; group.Height = 50; group.Name = "grp" + groupCount; group.Location = new Point(0, groupCount * 50 + 5); group.Text = strTemp; foreach (GroupBox item in panel2.Controls) { ((Panel)item.Controls[0]).BorderStyle = BorderStyle.None; } Panel panel = new Panel(); panel.Name = "pan" + groupCount; panel.Click += panParticles_Click; panel.Dock = DockStyle.Fill; panel.BorderStyle = BorderStyle.Fixed3D; panel.AutoScroll = true; group.Controls.Add(panel); panel2.Controls.Add(group); gp = group; groupCount++; } /// /// 选择分组 /// /// /// private void panParticles_Click(object sender, EventArgs e) { foreach (GroupBox item in panel2.Controls) { ((Panel)item.Controls[0]).BorderStyle = BorderStyle.None; } ((Panel)sender).BorderStyle = BorderStyle.Fixed3D; gp = (GroupBox)((Panel)sender).Parent; } /// /// 删除分组 /// /// /// private void btnDelGrp_Click(object sender, EventArgs e) { if (panel2.Controls.Count > 0 && gp != null) { DialogResult dr = MessageBox.Show("是否确认删除?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); if (dr == DialogResult.No) { return; } int height = gp.Location.Y; panel2.Controls.Remove(gp); groupCount--; foreach (GroupBox item in panel2.Controls) { if (item.Location.Y > height) { item.Location = new Point(item.Location.X, item.Location.Y - 50); } } if (panel2.Controls.Count > 0) { int c = panel2.Controls.Count - 1; gp = (GroupBox)panel2.Controls[c]; ((Panel)gp.Controls[0]).BorderStyle = BorderStyle.Fixed3D; } } } //分类 int typeIndexGroup = 0; /// /// 添加颗粒直径 /// /// /// private void btnAddValueGroup_Click(object sender, EventArgs e) { Panel panel = (Panel)gp.Controls[0]; AddVale(panel); } /// /// 添加测量结果文件 /// /// /// private void btnAddFileGroup_Click(object sender, EventArgs e) { if (gp == null) { MessageBox.Show("请添加分组!"); btnGroup_Click(null, null); return; } Panel panel = (Panel)gp.Controls[0]; System.Windows.Forms.FolderBrowserDialog dialog = new System.Windows.Forms.FolderBrowserDialog(); dialog.Description = "请选择测量结果所在文件夹"; if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) { ScanFile(dialog.SelectedPath, panel); } } /// /// 删除颗粒 /// /// /// private void btnDelGroup_Click(object sender, EventArgs e) { DialogResult dr = MessageBox.Show("是否确认删除?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); if (dr == DialogResult.No) { return; } foreach (GroupBox group in panel2.Controls) { Panel panel = (Panel)group.Controls[0]; DelVale(panel); } } /// /// 检验数据有效性,是否位离群值 /// /// /// private void btnCheckGroup_Click(object sender, EventArgs e) { foreach (GroupBox group in panel2.Controls) { Panel panel = (Panel)group.Controls[0]; if (!CheckVale(panel)) { break; } } } /// /// 极值分析 /// /// /// private void btnComputeGroup_Click(object sender, EventArgs e) { if (panel2.Controls.Count > 1) { List list = new List(); List list1 = new List() { new Business.groupInfo() { values=new double[] {85,25,30,35,40,45,50,55 },groupTitle="DL2" }, new Business.groupInfo() { values=new double[] {30,10,12,14,16,18,20,25 },groupTitle="LF1" }, new Business.groupInfo() { values=new double[] {30,0,5,8,20,25,10,15 },groupTitle="LF2" }, new Business.groupInfo() { values=new double[] {25,10,12,14,18,20,22,24},groupTitle="VD1-2" }, new Business.groupInfo() { values=new double[] {40,10,15,20,35,24,26,30 },groupTitle="VD2-2" }, new Business.groupInfo() { values=new double[] {45,10,15,20,25,30,35,29 },groupTitle="VD3" }, new Business.groupInfo() { values=new double[] {85,10,15,60,55,30,35,40},groupTitle="JZ" } }; foreach (GroupBox group in panel2.Controls) { Panel panel = (Panel)group.Controls[0]; int chkcount = panel.Controls.Count; double[] vs = new double[chkcount]; for (int i = 0; i < chkcount; i++) { vs[i] = Convert.ToDouble(((CheckBox)panel.Controls[i]).Text); } if (!CheckVale(panel,1)) { break; } Business.groupInfo groupInfo = new Business.groupInfo(); groupInfo.values = vs; groupInfo.groupTitle = group.Text; list.Add(groupInfo); } GroupsGridForm groupsGridForm = new GroupsGridForm(list); groupsGridForm.Show(); } } /// /// 选择分类A /// /// /// private void fzflA_Click(object sender, EventArgs e) { typeIndexGroup = 0; this.fztype.Image = Properties.Resources.A1; ListChangedTypeGroup(); } /// /// 选择分类B /// /// /// private void fzflB_Click(object sender, EventArgs e) { typeIndexGroup = 1; this.fztype.Image = Properties.Resources.B; ListChangedTypeGroup(); } /// /// 选择分类C /// /// /// private void fzflC_Click(object sender, EventArgs e) { typeIndexGroup = 2; this.fztype.Image = Properties.Resources.C1; ListChangedTypeGroup(); } /// /// 选择分类D /// /// /// private void fzflD_Click(object sender, EventArgs e) { typeIndexGroup = 3; this.fztype.Image = Properties.Resources.D; ListChangedTypeGroup(); } /// /// 选择分类DS /// /// /// private void fzflDS_Click(object sender, EventArgs e) { typeIndexGroup = 4; this.fztype.Image = Properties.Resources.DS; ListChangedTypeGroup(); } /// /// 分类改变后测量结果改变 /// private void ListChangedTypeGroup() { foreach (GroupBox group in panel2.Controls) { Panel panel = (Panel)group.Controls[0]; int sel = typeIndexGroup; foreach (var item in panel.Controls) { CheckBox check = (CheckBox)item; if (check.Tag.GetType().Name == "Double[]") { double[] list = (double[])check.Tag; check.Text = Math.Round(list[sel], 2).ToString(); } } } } #endregion #region 全局事件 /// /// 选择单组数据 /// /// /// private void rbtab1_ActiveChanged(object sender, EventArgs e) { if (rbtab1.Active) { panel2.Dock = DockStyle.None; panel2.Visible = false; panel1.Dock = DockStyle.Fill; panel1.Visible = true; } } /// /// 选择多组数据 /// /// /// private void rbtab2_ActiveChanged(object sender, EventArgs e) { if (rbtab2.Active) { panel1.Dock = DockStyle.None; panel1.Visible = false; panel2.Dock = DockStyle.Fill; panel2.Visible = true; } } /// /// 窗体加载 /// /// /// private void ExtremumApp_Load(object sender, EventArgs e) { panel2.Dock = DockStyle.None; panel2.Visible = false; panel1.Dock = DockStyle.Fill; panel1.Visible = true; //if (!License()) //{ // this.Close(); //} } /// /// 扫描文件夹添加测量结果 /// /// 文件夹路径 /// 添加数据的容器 private void ScanFile(string path, Panel panel) { //扫描路径 DirectoryInfo info = new DirectoryInfo(path); if (!info.Exists) return; FileSystemInfo[] files = info.GetFileSystemInfos(); for (int i = 0; i < files.Length; i++) { FileInfo file = files[i] as FileInfo; //是文件 if (file != null&& file.Extension== ".rst") { //string fpath = System.IO.Path.GetDirectoryName(file.Name); try { double[] list = Business.Classify.getClass(file.DirectoryName); int sel = typeIndex; CheckBox checkBox = new CheckBox(); checkBox.Text = Math.Round(list[sel], 2).ToString(); checkBox.Tag = list; checkBox.Width = 80; // checkBox.Font = new Font(checkBox.Font.FontFamily, 8, checkBox.Font.Style); int chkcount = panel.Controls.Count; int row = chkcount / 10; int col = chkcount % 10; checkBox.Location = new Point(10 + col * 80, row * 35); panel.Controls.Add(checkBox); } catch (Exception e) { MessageBox.Show(e.Message); } } else ScanFile(files[i].FullName, panel); } } /// /// 添加颗粒数据 /// /// 添加数据的容器 private void AddVale(Panel panel) { string strTemp = string.Empty; InputValue inputDialog = new InputValue(); inputDialog.TextHandler = (str) => { strTemp = str; }; inputDialog.StartPosition = FormStartPosition.CenterParent; DialogResult result = inputDialog.ShowDialog(); string size = strTemp; if (!string.IsNullOrEmpty(size)) { for (int i = 0; i < size.Split(',').Length; i++) { string init = size.Split(',')[i]; if (!Business.Tools.IsIntOrDouble(init)) { MessageBox.Show("不是数字!"); continue; } CheckBox checkBox = new CheckBox(); checkBox.Text = init; checkBox.Tag = Convert.ToDouble(init); checkBox.Width = 80; int chkcount = panel.Controls.Count; int row = chkcount / 10; int col = chkcount % 10; checkBox.Location = new Point(10 + col * 80, row * 35); panel.Controls.Add(checkBox); } } //if (!Business.Tools.IsIntOrDouble(size)) //{ // MessageBox.Show("请输入数字!"); // return; //} //CheckBox checkBox = new CheckBox(); //checkBox.Text = size; //checkBox.Tag = Convert.ToDouble(size); //checkBox.Width = 80; //int chkcount = panel.Controls.Count; //int row = chkcount / 10; //int col = chkcount % 10; //checkBox.Location = new Point(10 + col * 80, row * 35); //panel.Controls.Add(checkBox); } /// /// 删除颗粒数据 /// /// 数据的容器 private void DelVale(Panel panel) { for (int i = panel.Controls.Count - 1; i >= 0; i--) { CheckBox check = (CheckBox)panel.Controls[i]; if (check.Checked) { panel.Controls.RemoveAt(i); } } int chkcount = panel.Controls.Count; int rows = 0; int cols = 0; for (int i = 0; i < chkcount; i++) { CheckBox check = (CheckBox)panel.Controls[i]; check.Location = new Point(10 + cols * 80, rows * 35); cols++; if (cols == 10) { rows++; cols = 0; } } } /// /// 检测数据有效性 /// /// 数据的容器 /// private bool CheckVale(Panel panel,int ischeck=0) { int chkcount = panel.Controls.Count; if (chkcount < 3) { MessageBox.Show("试验数据过少。"); return false; } double[] vs = new double[chkcount]; double[] gg = { 140, 240, 532, 205, 150, 110, 200, 180, 220, 300, 70, 390, 100, 90, 320, 190, 250, 150, 280, 250, 490, 120, 500, 200 }; for (int i = 0; i < chkcount; i++) { vs[i] = Convert.ToDouble(((CheckBox)panel.Controls[i]).Text); } int ret = Business.Tools.Grubbls(vs); if (ret == 0&& ischeck==0) { MessageBox.Show("试验数据有效。"); return true; } else if (ret == 1) { MessageBox.Show("最大的夹杂物长度值【"+ vs.Max().ToString() + "】是离群值,试验数据无效。"); return false; } else if (ret == 2) { MessageBox.Show("最小的夹杂物长度值【" + vs.Min().ToString() + "】是离群值,试验数据无效。"); return false; } return true; } //检测注册 private bool License() { //硬件ID //string HardwareID = GetLicenseInfo("HardwareID"); ////创建ManagementObjectSearcher对象 //ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_BIOS"); //String strHardDiskID = null; ////调用ManagementObjectSearcher类的Get方法取主板号 //foreach (ManagementObject mo in searcher.Get()) //{ // strHardDiskID = mo["SerialNumber"].ToString().Trim();//记录获得的磁盘序列号 // break; //} //if (Business.Tools.Base64Decrypt(HardwareID) != strHardDiskID) //{ // MessageBox.Show("未注册!"); // return false; //} try { //有效期 DateTime ExpireDate = Convert.ToDateTime(Business.Tools.Base64Decrypt(GetLicenseInfo("ExpireDate"))); if (DateTime.Now > ExpireDate) { MessageBox.Show("已超过使用期限!"); return false; } } catch (Exception) { MessageBox.Show("未注册!"); return false; } return true; } public static string GetLicenseInfo(string NodeName) { string path = Application.StartupPath + "\\LicenseData.xml"; return Business.Tools.GetXMLInformations(path, NodeName); } #endregion } }