using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; using System.Windows.Forms; namespace OTSExtremum { public partial class MainForm : Form { public MainForm() { InitializeComponent(); } int groupCount = 0; GroupBox gp; /// /// 添加颗粒直径 /// /// /// private void btnAddValue_Click(object sender, EventArgs e) { string size = txtParticle.Text; if (!Business.Tools.IsIntOrDouble(size)) { MessageBox.Show("请输入数字!"); return; } if (gp == null) { MessageBox.Show("请添加分组!"); btnGroup_Click(null, null); return; } Panel panel = (Panel)gp.Controls[0]; 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); chkcount = chkcount+1; } /// /// 添加测量结果文件 /// /// /// private void btnAddFile_Click(object sender, EventArgs e) { if (gp == null) { MessageBox.Show("请添加分组!"); btnGroup_Click(null, null); return; } Panel panel = (Panel)gp.Controls[0]; OpenFileDialog fileDialog = new OpenFileDialog(); fileDialog.Multiselect = true; fileDialog.Title = "请选择测量结果文件"; fileDialog.Filter = "所有文件(*rst*)|*.rst*"; //设置要选择的文件的类型 if (fileDialog.ShowDialog() == DialogResult.OK) { string file = fileDialog.FileName;//返回文件的完整路径 string path = System.IO.Path.GetDirectoryName(file); double[] list = Business.Classify.getClass(path); int sel = cobType.SelectedIndex; 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); chkcount = chkcount + 1; } } /// /// 改变颗粒分类 /// /// /// private void cobType_SelectedIndexChanged(object sender, EventArgs e) { foreach (GroupBox group in panel1.Controls) { Panel panel = (Panel)group.Controls[0]; int sel = cobType.SelectedIndex; 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(); } } } } /// /// 删除颗粒 /// /// /// private void btnDel_Click(object sender, EventArgs e) { DialogResult dr = MessageBox.Show("是否确认删除?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); if (dr == DialogResult.No) { return; } foreach (GroupBox group in panel1.Controls) { Panel panel = (Panel)group.Controls[0]; 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 void btnCheck_Click(object sender, EventArgs e) { foreach (GroupBox group in panel1.Controls) { Panel panel = (Panel)group.Controls[0]; int chkcount = panel.Controls.Count; if (chkcount < 3) { MessageBox.Show("试验数据过少。"); return; } 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) { MessageBox.Show("试验数据有效。"); } else if (ret == 1) { MessageBox.Show("最大的夹杂物长度值是离群值,试验数据无效。"); } else if (ret == 2) { MessageBox.Show("最小的夹杂物长度值是离群值,试验数据无效。"); } } } /// /// 极值分析 /// /// /// private void btnCompute_Click(object sender, EventArgs e) { if (panel1.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 panel1.Controls) { Panel panel = (Panel)group.Controls[0]; int chkcount = panel.Controls.Count; if (chkcount < 3) { MessageBox.Show("试验数据过少。"); return; } 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) { DialogResult dr = MessageBox.Show(group.Text+"试验数据存在离群值,是否继续分析?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); if (dr == DialogResult.No) { return; } } Business.groupInfo groupInfo = new Business.groupInfo(); groupInfo.values = vs; groupInfo.groupTitle = group.Text; list.Add(groupInfo); //GridForm gridForm = new GridForm(gg, group.Text); //gridForm.Show(); } GroupsGridForm groupsGridForm = new GroupsGridForm(list1); groupsGridForm.Show(); } else { if (panel1.Controls.Count > 0 && panel1.Controls[0].Controls.Count > 0) { Panel panel = (Panel)(panel1.Controls[0].Controls[0]); int chkcount = panel.Controls.Count; if (chkcount < 3) { MessageBox.Show("试验数据过少。"); return; } 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) { DialogResult dr = MessageBox.Show("试验数据存在离群值,是否继续分析?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); if (dr == DialogResult.No) { return; } } GridForm gridForm = new GridForm(gg, panel1.Controls[0].Text); gridForm.Show(); } } } /// /// 添加分组 /// /// /// 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(); GroupBox group = new GroupBox(); group.Width = panel1.Width-20; if (groupCount == 0) { group.Height = 250; } else { group.Height = 50; panel1.Controls[0].Height = 50; } group.Name = "grp"+ groupCount; group.Location = new Point(0, groupCount * 50+ 5); group.Text = strTemp; foreach (GroupBox item in panel1.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); panel1.Controls.Add(group); gp = group; groupCount++; } /// /// 选择分组 /// /// /// private void panParticles_Click(object sender, EventArgs e) { foreach (GroupBox item in panel1.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 (panel1.Controls.Count > 0&& gp!=null) { DialogResult dr = MessageBox.Show("是否确认删除?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); if (dr == DialogResult.No) { return; } int height = gp.Location.Y; panel1.Controls.Remove(gp); groupCount--; foreach (GroupBox item in panel1.Controls) { if (item.Location.Y > height) { item.Location = new Point(item.Location.X, item.Location.Y-50); } } } } } }