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
}
}