using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using SmartCoalApplication.Base.AutoMeasure;
using SmartCoalApplication.Core;
using System.Xml;
using SmartCoalApplication.Annotation.Enum;
using SmartCoalApplication.Base.MeasureModel;
using SmartCoalApplication.Base.CommTool;
using System.IO;
using System.Text.RegularExpressions;
using SmartCoalApplication.Resources;
using Resources;
using SmartCoalApplication.Core.DbOpreate.DbModel;
using System.Reflection;
using Microsoft.CSharp;
using System.CodeDom.Compiler;
namespace SmartCoalApplication.MeasureProcedure
{
internal partial class MeasureSetUp : PdnBaseForm
{
///
/// 設置點擊結點,根目錄名稱,點擊目錄的層數
///
public TreeNode clickNode = new TreeNode();
public string rootName = "";
public int level = 0;//節點的層數
private List labels = new List();//插入公式label
private List buttons = new List();//插入公式刪除按鈕
// 创建委托
public delegate void TransferDataDelegate(List list);
// 声明一个事件(本质是一个委托)
public event TransferDataDelegate TransferEvent;
///
/// 公式相关
///
private Dictionary> fourmulaParametersList = new Dictionary>();
///
/// 新增编辑公式相关
///
private List everyFourmulaList = new List();
///
/// 树状结构数据
///
protected MeasureMaintenanceTreeData measureMaintenanceTreeData;
private string selectedId;
private MeasureMaintenanceTreeSpecificData selectedData;
private TreeNode selectedTreeNode;
private string fileName;
private AppWorkspace appWorkspace;
private List lineIDList = new List();
///
/// 公式符号
///
private string[] symbolArray = new string[] { "+", "-", "*", "/" };
private List parametersList = new List();
private bool isChoose = true;
private bool isRect = true;
private bool isThreash = true;
public MeasureSetUp(string name,List list,AppWorkspace appWorkspace)
{
InitializeComponent();
InitializeComponent2();
this.label3.Visible = false;
this.comboBox1.Visible = false;
this.Icon = PdnInfo.AppIcon;
this.appWorkspace = appWorkspace;
#region [读取树状结构]
#region [读取基础结构树]
string basicFilePath;
if (Program.instance.configModel.Language == 1)
{
basicFilePath = Application.StartupPath + "\\Config\\" + Program.instance.SettingPrefix + "\\basicTreeDataSimple.xml";
}
else
{
basicFilePath = Application.StartupPath + "\\Config\\" + Program.instance.SettingPrefix + "\\basicTreeDataTraditional.xml";
}
MeasureMaintenanceTreeData basicMeasureMaintenanceTreeData = XmlSerializeHelper.DESerializer(FileOperationHelper.ReadStringFromFile(basicFilePath, FileMode.Open));
#endregion
string filePath = Application.StartupPath + "\\Config\\" + Program.instance.SettingPrefix + "\\MeasureMaintenanceType\\";
if (!Directory.Exists(filePath))
{
Directory.CreateDirectory(filePath);
}
fileName = name;
filePath = $"{filePath}{fileName}.xml";
if (!System.IO.File.Exists(filePath))
{
measureMaintenanceTreeData = XmlSerializeHelper.DESerializer(FileOperationHelper.ReadStringFromFile(basicFilePath, FileMode.Open));
#region
//int id = 100000;
//foreach (var item in measureMaintenanceTreeData.MeasureMaintenanceTreeDataList) {
// foreach (var item2 in item.MeasureMaintenanceTreeSpecificSonDataList) {
// item2.MeasureMaintenanceTreeSpecificDataId = id.ToString();
// int sonId = id + 1;
// foreach (var item3 in item2.MeasureMaintenanceTreeSpecificFormulaDataList)
// {
// item3.FormulaParameterParentId = id.ToString();
// item3.FormulaParametersId = sonId.ToString();
// sonId++;
// if (item2.MeasureMaintenanceTreeSpecificFormulaDataList.IndexOf(item3) == item2.MeasureMaintenanceTreeSpecificFormulaDataList.Count - 1) {
// id = sonId;
// }
// }
// }
//}
//WriteXml();
#endregion
}
else
{
measureMaintenanceTreeData = XmlSerializeHelper.DESerializer(FileOperationHelper.ReadStringFromFile(filePath, FileMode.Open));
foreach (var item in measureMaintenanceTreeData.MeasureMaintenanceTreeDataList)
{
MeasureMaintenanceTreeSpecificData data;
this.appWorkspace.RecursionGetData(item.MeasureMaintenanceTreeSpecificDataId, basicMeasureMaintenanceTreeData.MeasureMaintenanceTreeDataList,out data);
if (data != null)
{
item.MeasureMaintenanceTreeSpecificName = data.MeasureMaintenanceTreeSpecificName;
}
foreach (var item2 in item.MeasureMaintenanceTreeSpecificSonDataList)
{
MeasureMaintenanceTreeSpecificData data2;
this.appWorkspace.RecursionGetData(item2.MeasureMaintenanceTreeSpecificDataId, basicMeasureMaintenanceTreeData.MeasureMaintenanceTreeDataList, out data2);
if (data2 != null)
{
item2.MeasureMaintenanceTreeSpecificName = data2.MeasureMaintenanceTreeSpecificName;
item2.MeasureMaintenanceTreeSpecificFormulaDataList.Clear();
item2.MeasureMaintenanceTreeSpecificFormulaDataList.AddRange(data2.MeasureMaintenanceTreeSpecificFormulaDataList);
}
}
}
}
#region [判断加密狗]
if (Program.useSenseShield)
{
var shieldValue = Program.shieldValue;
List needRemove = new List();
foreach (var item in measureMaintenanceTreeData.MeasureMaintenanceTreeDataList)
{
uint fatherId = Convert.ToUInt32(item.MeasureMaintenanceTreeSpecificDataId);
if (shieldValue.ContainsKey(fatherId))
{
foreach (var item2 in item.MeasureMaintenanceTreeSpecificSonDataList)
{
uint id = Convert.ToUInt32(item2.MeasureMaintenanceTreeSpecificDataId);
if (shieldValue.ContainsKey(id))
{
if (!shieldValue[id])
{
needRemove.Add(item2);
}
}
else
{
needRemove.Add(item2);
}
}
}
else
{
needRemove.Add(item);
}
}
foreach (var item in needRemove)
{
var delete = measureMaintenanceTreeData.MeasureMaintenanceTreeDataList.Where(m => m.MeasureMaintenanceTreeSpecificDataId.Equals(item.MeasureMaintenanceTreeSpecificDataId)).FirstOrDefault();
if (delete == null)
{
foreach (var item2 in measureMaintenanceTreeData.MeasureMaintenanceTreeDataList)
{
if (item2.MeasureMaintenanceTreeSpecificSonDataList.Contains(item))
{
item2.MeasureMaintenanceTreeSpecificSonDataList.Remove(item);
}
}
}
else
{
measureMaintenanceTreeData.MeasureMaintenanceTreeDataList.Remove(delete);
}
}
}
#endregion
#endregion
this.treeViewSort.ItemHeight = 18;
this.treeViewSort.HideSelection = false;//失去焦点后不隐藏选中节点
//自已绘制
this.treeViewSort.DrawNode += new DrawTreeNodeEventHandler(treeViewSort_DrawNode);
everyFourmulaList.AddRange(list);
foreach (var item in measureMaintenanceTreeData.MeasureMaintenanceTreeDataList)
{
if (item.MeasureMaintenanceTreeSpecificDataId == "9")
{
foreach (var item2 in item.MeasureMaintenanceTreeSpecificSonDataList)
{
isChoose = item2.MeasureMaintenanceTreeSpecificIsCon;
}
}
else if (item.MeasureMaintenanceTreeSpecificDataId == "10")
{
foreach (var item2 in item.MeasureMaintenanceTreeSpecificSonDataList)
{
if (item2.MeasureMaintenanceTreeSpecificDataId == "100300")
isRect = item2.MeasureMaintenanceTreeSpecificIsRect;
}
}
else if (true && item.MeasureMaintenanceTreeSpecificDataId == "7")
{
foreach (var item2 in item.MeasureMaintenanceTreeSpecificSonDataList)
{
if (item2.MeasureMaintenanceTreeSpecificDataId == "100176")
isThreash = item2.MeasureMaintenanceTreeSpecificIsThreash;
}
}
}
#region [标尺相关信息]
List ruleList = Program.instance.mic_rulersAll;
comboBox2.DataSource = ruleList;
comboBox2.DisplayMember = "ruler_name";
comboBox2.SelectedIndex = -1;
#endregion
}
private void InitializeComponent2()
{
this.Text = PdnResources.GetString("NewTestProcedureSetting");
this.rootAdd.Text = PdnResources.GetString("NewAdd");
this.groupBox1.Text = PdnResources.GetString("NewOperation");
this.buttonCancel.Text = PdnResources.GetString("NewCancel");
this.buttonDetermine.Text = PdnResources.GetString("NewConfirm");
this.groupBox2.Text = PdnResources.GetString("NewcCassification");
this.groupBox3.Text = PdnResources.GetString("NewMeasureLineSetting");
this.buttonDelete.Text = PdnResources.GetString("NewDelete");
this.buttonInsert.Text = PdnResources.GetString("NewInsert");
this.label2.Text = PdnResources.GetString("NewFormula") + ":";
this.label4.Text = PdnResources.GetString("MeasureSetUp.label4") + ":";
this.label1.Text = PdnResources.GetString("NewAlias") + ":";
this.groupBox4.Text = PdnResources.GetString("NewMeasuringLine");
this.groupBox5.Text = PdnResources.GetString("NewFormulaSymbol");
this.button3.Text = PdnResources.GetString("NewAverageValue");
this.button2.Text = PdnResources.GetString("NewMinimumValue");
this.button1.Text = PdnResources.GetString("NewMaximum");
this.toolStripMenuEdit1.Text = PdnResources.GetString("NewEdit");
this.toolStripMenuDelete1.Text = PdnResources.GetString("NewDelete");
}
private void treeViewSort_DrawNode(object sender, DrawTreeNodeEventArgs e)
{
e.DrawDefault = true; //使用默认颜色,只需要在TreeView失去焦点时选中节点仍然突显
return;
}
///
/// 窗口加載,初始化
///
private void MeasureSetUp_Load(object sender, EventArgs e)
{
//初始化鏈接節點
RootNodeInitialize();
//為根節點鏈接新增選項
//為檢驗項目鏈接編輯選項
ContextmenuInitialize();
}
///
/// 末級分類右鍵新增
///
private void rootAdd_Click(object sender, EventArgs e)
{
//調用委托
//子窗体Form2
InspectionItemMaintenance form2 = new InspectionItemMaintenance(null,"","",">",">","xinzeng");
//调用子窗体中的委托,将方法给委托
form2.TransferEvent += frm_TransEvent;
form2.ShowDialog();
}
//方法的具体实现
private void frm_TransEvent(string jianyanxiangmuName, string guige1,string guige2, string cmpre1, string cmpre2,bool isEdit)
{
if (isEdit)
{
EditJianyanxiangmu(jianyanxiangmuName, guige1, guige2, cmpre1, cmpre2);
}
else {
Addjianyanxiangmu(jianyanxiangmuName, guige1, guige2, cmpre1, cmpre2);
}
}
///
/// 節點初始化
///
private void RootNodeInitialize()
{
treeViewSort.Nodes.Clear();
foreach (var item in measureMaintenanceTreeData.MeasureMaintenanceTreeDataList)
{
TreeNode treeNode = new TreeNode();
treeNode.Name = item.MeasureMaintenanceTreeSpecificDataId;
treeNode.Text = item.MeasureMaintenanceTreeSpecificName;
List treeNodes;
RecursionTreeData(item, out treeNodes);
treeNode.Nodes.AddRange(treeNodes.ToArray());
treeViewSort.Nodes.Add(treeNode);
}
}
private void RecursionGetFourmulaData(string id , out List data)
{
MeasureMaintenanceTreeSpecificData thisData;
this.appWorkspace.RecursionGetData(id, measureMaintenanceTreeData.MeasureMaintenanceTreeDataList, out thisData);
this.fourmulaParametersList.TryGetValue(id, out data);
if (thisData != null)
{
if (data == null || data.Count == 0)
{
RecursionGetFourmulaData(thisData.MeasureMaintenanceTreeSpecificDataParentId, out data);
}
}
}
///
/// 递归查询树状结构
///
///
///
private void RecursionTreeData(MeasureMaintenanceTreeSpecificData data, out List treeNodes)
{
treeNodes = new List();
if (data.MeasureMaintenanceTreeSpecificSonDataList == null || data.MeasureMaintenanceTreeSpecificSonDataList.Count == 0) {
return;
}
foreach (var item in data.MeasureMaintenanceTreeSpecificSonDataList)
{
TreeNode treeNode = new TreeNode();
treeNode.Name = item.MeasureMaintenanceTreeSpecificDataId;
treeNode.Text = item.MeasureMaintenanceTreeSpecificName;
if (item.MeasureMaintenanceTreeSpecificSonDataList != null && item.MeasureMaintenanceTreeSpecificSonDataList.Count > 0) {
List newtreeNodes;
RecursionTreeData(item, out newtreeNodes);
treeNode.Nodes.AddRange(newtreeNodes.ToArray());
}
treeNodes.Add(treeNode);
if (item.MeasureMaintenanceTreeSpecificFormulaDataList != null && item.MeasureMaintenanceTreeSpecificFormulaDataList.Count > 0) {
if (this.fourmulaParametersList.ContainsKey(item.MeasureMaintenanceTreeSpecificDataId))
{
this.fourmulaParametersList[item.MeasureMaintenanceTreeSpecificDataId] = item.MeasureMaintenanceTreeSpecificFormulaDataList;
}
else {
this.fourmulaParametersList.Add(item.MeasureMaintenanceTreeSpecificDataId, item.MeasureMaintenanceTreeSpecificFormulaDataList);
}
}
}
}
///
/// 连接menuScrip,右键菜单
///
private void ContextmenuInitialize()
{
//為根節點鏈接新增選項
//為檢驗項目鏈接編輯選項
int nodesCount = treeViewSort.Nodes.Count;
for (int i = 0; i < nodesCount; i++)
{
int erjiNodesCount = treeViewSort.Nodes[i].Nodes.Count;
for (int j = 0; j < erjiNodesCount; j++)
{
treeViewSort.Nodes[i].Nodes[j].ContextMenuStrip = contextRootAdd;
int jianyanNodesCount = treeViewSort.Nodes[i].Nodes[j].Nodes.Count;
for (int k = 0; k < jianyanNodesCount; k++)
{
treeViewSort.Nodes[i].Nodes[j].Nodes[k].ContextMenuStrip = contextMenuEdit;
}
}
}
}
///
/// 获取最大父级ID
///
///
///
private void RecursionGetFatherData(string id, out MeasureMaintenanceTreeSpecificData data)
{
this.appWorkspace.RecursionGetData(id, measureMaintenanceTreeData.MeasureMaintenanceTreeDataList, out data);
if (data != null)
{
if (data.MeasureMaintenanceTreeSpecificLevel != 1)
{
RecursionGetFatherData(data.MeasureMaintenanceTreeSpecificDataParentId, out data);
}
}
}
///
/// 獲取點擊時的節點與層數,和根節點名稱
/// 點擊末級分類時,列表顯示預設測量綫
/// 點擊測量綫別名時,顯示別名與公式
///
private void treeViewSort_MouseDown(object sender, TreeNodeMouseClickEventArgs e)
{
listCeliangxian.DataSource = null;
this.treeViewSort.SelectedNode = e.Node;
var id = e.Node.Name;
textzbieMing.Text = string.Empty;
textBox1.Text = string.Empty;
if (e.Node.Level == 3)
{
var chooseData = everyFourmulaList.Where(m => m.FormulaId.Equals(e.Node.Name)).FirstOrDefault();
if (chooseData != null)
{
textzbieMing.Text = chooseData.FormulaName;
textBox1.Text = chooseData.FormulaExpression;
}
}
MeasureMaintenanceTreeSpecificData fatherData;
RecursionGetFatherData(id, out fatherData);
MeasureMaintenanceTreeSpecificData data;
this.appWorkspace.RecursionGetData(id, measureMaintenanceTreeData.MeasureMaintenanceTreeDataList, out data);
this.selectedData = data;
if (data.MeasureMaintenanceTreeSpecificLevel == 2)
{
this.comboBox2.Visible = true;
this.label4.Visible = true;
this.textzbieMing.ReadOnly = true;
this.textBox1.ReadOnly = true;
this.buttonInsert.Text = "保存";
List ruleList = Program.instance.mic_rulersAll;
if (data.ruleMessage != null) {
var rule = ruleList.Where(m => m.id == Convert.ToInt32(data.ruleMessage.ruleId)).FirstOrDefault();
if (rule != null)
{
var index = ruleList.IndexOf(rule);
comboBox2.SelectedIndex = index;
}
else {
comboBox2.SelectedIndex = -1;
}
}
else
{
comboBox2.SelectedIndex = -1;
}
}
else
{
this.comboBox2.Visible = false;
this.label4.Visible = false;
this.textzbieMing.ReadOnly = false;
this.textBox1.ReadOnly = false;
this.buttonInsert.Text = "插入";
}
if (fatherData.MeasureMaintenanceTreeSpecificDataId == "9")
{
if (data.MeasureMaintenanceTreeSpecificLevel == 2)
{
this.label3.Text = "導電布:";
this.comboBox1.Items.Clear();
this.comboBox1.Items.AddRange(new object[] {"是", "否"});
this.label3.Visible = true;
this.comboBox1.Visible = true;
if (this.isChoose)
{
this.comboBox1.SelectedIndex = 0;
}
else
{
this.comboBox1.SelectedIndex = 1;
}
}
else {
this.label3.Visible = false;
this.comboBox1.Visible = false;
}
}
else if (fatherData.MeasureMaintenanceTreeSpecificDataId == "10" && data.MeasureMaintenanceTreeSpecificDataId == "100300")
{
if (data.MeasureMaintenanceTreeSpecificLevel == 2)
{
this.label3.Text = "范围补偿:";
this.comboBox1.Items.Clear();
this.comboBox1.Items.AddRange(new object[] { "是", "否" });
this.label3.Visible = true;
this.comboBox1.Visible = true;
if (this.isRect)
{
this.comboBox1.SelectedIndex = 0;
}
else
{
this.comboBox1.SelectedIndex = 1;
}
}
else
{
this.label3.Visible = false;
this.comboBox1.Visible = false;
}
}
else if (true && fatherData.MeasureMaintenanceTreeSpecificDataId == "7" && data.MeasureMaintenanceTreeSpecificDataId == "100176")
{
if (data.MeasureMaintenanceTreeSpecificLevel == 2)
{
this.label3.Text = "二值处理:";
this.comboBox1.Items.Clear();
this.comboBox1.Items.AddRange(new object[] { "是", "否" });
this.label3.Visible = true;
this.comboBox1.Visible = true;
if (this.isThreash)
{
this.comboBox1.SelectedIndex = 0;
}
else
{
this.comboBox1.SelectedIndex = 1;
}
}
else
{
this.label3.Visible = false;
this.comboBox1.Visible = false;
}
}
else if (fatherData.MeasureMaintenanceTreeSpecificDataId == "1" || fatherData.MeasureMaintenanceTreeSpecificDataId == "2")
{
if (data.MeasureMaintenanceTreeSpecificLevel == 2)
{
this.label3.Text = "孔銅位置:";
this.comboBox1.Items.Clear();
this.comboBox1.Items.AddRange(new object[] { "上", "下" });
this.label3.Visible = true;
this.comboBox1.Visible = true;
this.comboBox1.SelectedIndex = data.MeasureMaintenanceTreeSpecificIsPos ? 0 : 1;
}
else {
this.label3.Visible = false;
this.comboBox1.Visible = false;
}
}
else
{
this.label3.Visible = false;
this.comboBox1.Visible = false;
}
parametersList = new List();
RecursionGetFourmulaData(id, out parametersList);
if (parametersList == null) {
parametersList = new List();
}
listCeliangxian.DataSource = parametersList;
listCeliangxian.DisplayMember = "FormulaParameterShowName";
this.selectedId = id;
this.selectedTreeNode = e.Node;
var fourmula = everyFourmulaList.Where(m => m.FormulaId == data.MeasureMaintenanceTreeSpecificDataId).FirstOrDefault();
if (fourmula != null)
{
textzbieMing.Text = fourmula.FormulaName;
textBox1.Text = fourmula.FormulaExpression;
}
}
///
/// 新增檢驗項目
///
private void Addjianyanxiangmu(string jianyanxiangmuName, string guige1, string guige2, string cmpre1, string cmpre2)
{
MeasureMaintenanceTreeSpecificData data = new MeasureMaintenanceTreeSpecificData();
string id = Guid.NewGuid().ToString();
data.MeasureMaintenanceTreeSpecificDataId = id;
data.MeasureMaintenanceTreeSpecificDataParentId = this.selectedData.MeasureMaintenanceTreeSpecificDataId;
try
{
double a = Convert.ToDouble(guige1);
}
catch (Exception)
{
guige1 = string.Empty;
}
try
{
double b = Convert.ToDouble(guige2);
}
catch (Exception)
{
guige2 = string.Empty;
}
data.MeasureMaintenanceTreeSpecificIntervalList = new List() { guige1, guige2 };
data.MeasureMaintenanceTreeSpecificIntervalCompareList = new List() { cmpre1, cmpre2 };
data.MeasureMaintenanceTreeSpecificLevel = 3;
data.MeasureMaintenanceTreeSpecificName = jianyanxiangmuName;
data.MeasureMaintenanceTreeSpecificSonDataList = new List();
MeasureMaintenanceTreeSpecificData fatherData;
this.appWorkspace.RecursionGetData(data.MeasureMaintenanceTreeSpecificDataParentId, measureMaintenanceTreeData.MeasureMaintenanceTreeDataList, out fatherData);
if (fatherData != null) {
fatherData.MeasureMaintenanceTreeSpecificSonDataList.Add(data);
}
this.treeViewSort.Focus();
TreeNode treeNode = new TreeNode();
treeNode.Name = data.MeasureMaintenanceTreeSpecificDataId;
treeNode.Text = data.MeasureMaintenanceTreeSpecificName;
treeNode.ContextMenuStrip = contextMenuEdit;
this.selectedTreeNode.Nodes.Add(treeNode);
this.selectedTreeNode.Expand();
this.treeViewSort.SelectedNode = treeNode;
this.selectedId = id;
this.selectedTreeNode = treeNode;
this.label3.Visible = false;
this.comboBox1.Visible = false;
this.comboBox2.Visible = false;
this.label4.Visible = false;
this.textzbieMing.ReadOnly = false;
this.textBox1.ReadOnly = false;
this.buttonInsert.Text = "插入";
}
///
/// 修改檢驗項目
///
private void EditJianyanxiangmu(string jianyanxiangmuName, string guige1, string guige2, string cmpre1, string cmpre2)
{
this.selectedTreeNode.Text = jianyanxiangmuName;
MeasureMaintenanceTreeSpecificData data;
this.appWorkspace.RecursionGetData(this.selectedData.MeasureMaintenanceTreeSpecificDataId, measureMaintenanceTreeData.MeasureMaintenanceTreeDataList, out data);
if (data != null)
{
data.MeasureMaintenanceTreeSpecificName = jianyanxiangmuName;
if (data.MeasureMaintenanceTreeSpecificIntervalList == null)
{
data.MeasureMaintenanceTreeSpecificIntervalList = new List();
data.MeasureMaintenanceTreeSpecificIntervalCompareList = new List();
}
try
{
double a = Convert.ToDouble(guige1);
}
catch (Exception)
{
guige1 = string.Empty;
}
try
{
double b = Convert.ToDouble(guige2);
}
catch (Exception)
{
guige2 = string.Empty;
}
data.MeasureMaintenanceTreeSpecificIntervalList = new List() { guige1, guige2 };
data.MeasureMaintenanceTreeSpecificIntervalCompareList = new List() { cmpre1, cmpre2 };
var list1 = everyFourmulaList.Where(m => m.FormulaParentId.Equals(data.MeasureMaintenanceTreeSpecificDataId)).ToList();
for (int i = 0; i < list1.Count; i++)
{
list1[i].TestItems = jianyanxiangmuName;
//list1[i].Specification = data.MeasureMaintenanceTreeSpecificIntervalList.Count == 2 ? $"{data.MeasureMaintenanceTreeSpecificIntervalList[0]}{data.MeasureMaintenanceTreeSpecificIntervalCompareList[0]}X{data.MeasureMaintenanceTreeSpecificIntervalCompareList[1]}{data.MeasureMaintenanceTreeSpecificIntervalList[1]}" : "-";
if (string.IsNullOrEmpty(data.MeasureMaintenanceTreeSpecificIntervalList[0]) && !string.IsNullOrEmpty(data.MeasureMaintenanceTreeSpecificIntervalList[1]))
{
list1[i].Specification = $"X{data.MeasureMaintenanceTreeSpecificIntervalCompareList[1]}{data.MeasureMaintenanceTreeSpecificIntervalList[1]}";
}
else if (string.IsNullOrEmpty(data.MeasureMaintenanceTreeSpecificIntervalList[0]) && string.IsNullOrEmpty(data.MeasureMaintenanceTreeSpecificIntervalList[1]))
{
list1[i].Specification = $"-";
}
else if (string.IsNullOrEmpty(data.MeasureMaintenanceTreeSpecificIntervalList[1]) && !string.IsNullOrEmpty(data.MeasureMaintenanceTreeSpecificIntervalList[0]))
{
list1[i].Specification = $"{data.MeasureMaintenanceTreeSpecificIntervalList[0]}{data.MeasureMaintenanceTreeSpecificIntervalCompareList[0]}X";
}
else
{
list1[i].Specification = data.MeasureMaintenanceTreeSpecificIntervalList.Count == 2 ? $"{data.MeasureMaintenanceTreeSpecificIntervalList[0]}{data.MeasureMaintenanceTreeSpecificIntervalCompareList[0]}X{data.MeasureMaintenanceTreeSpecificIntervalCompareList[1]}{data.MeasureMaintenanceTreeSpecificIntervalList[1]}" : "-";
}
}
}
}
///
/// 獲取規格
///
private void GetGuige(out string guige1,out string guige2, out string compare1, out string compare2)
{
MeasureMaintenanceTreeSpecificData data;
this.appWorkspace.RecursionGetData(this.selectedData.MeasureMaintenanceTreeSpecificDataId, measureMaintenanceTreeData.MeasureMaintenanceTreeDataList, out data);
if (data != null)
{
if (data.MeasureMaintenanceTreeSpecificIntervalList != null && data.MeasureMaintenanceTreeSpecificIntervalList.Count == 2)
{
guige1 = data.MeasureMaintenanceTreeSpecificIntervalList[0];
guige2 = data.MeasureMaintenanceTreeSpecificIntervalList[1];
try
{
compare1 = data.MeasureMaintenanceTreeSpecificIntervalCompareList[0];
compare2 = data.MeasureMaintenanceTreeSpecificIntervalCompareList[1];
}
catch (Exception ex)
{
data.MeasureMaintenanceTreeSpecificIntervalCompareList.Add(">");
data.MeasureMaintenanceTreeSpecificIntervalCompareList.Add(">");
compare1 = ">";
compare2 = ">";
}
}
else
{
guige1 = string.Empty;
guige2 = string.Empty;
compare1 = ">";
compare2 = ">";
}
}
else {
guige1 = string.Empty;
guige2 = string.Empty;
compare1 = ">";
compare2 = ">";
}
}
///
/// 檢測項目右側編輯
///
private void toolStripMenuEdit1_Click(object sender, EventArgs e)
{
string guige1, guige2, compare1, compare2;
GetGuige(out guige1, out guige2, out compare1, out compare2);
//調用委托
//子窗体Form2
InspectionItemMaintenance form2 = new InspectionItemMaintenance(this.selectedTreeNode.Text, guige1, guige2,compare1,compare2, "bianji");
//调用子窗体中的委托,将方法给委托
form2.TransferEvent += frm_TransEvent;
form2.ShowDialog();
}
///
/// 插入按钮 新增或者修改測量綫
///
private void buttonInsert_Click(object sender, EventArgs e)
{
if (this.treeViewSort.SelectedNode == null)
{
return;
}
if (this.treeViewSort.SelectedNode.Level == 1)
{
string id = this.treeViewSort.SelectedNode.Name;
MeasureMaintenanceTreeSpecificData thisdata;
this.appWorkspace.RecursionGetData(id, measureMaintenanceTreeData.MeasureMaintenanceTreeDataList, out thisdata);
if (this.comboBox2.SelectedIndex != -1)
{
if (thisdata.ruleMessage == null)
{
thisdata.ruleMessage = new RuleMessage();
}
thisdata.ruleMessage.ruleId = Program.instance.mic_rulersAll[comboBox2.SelectedIndex].id.ToString();
thisdata.ruleMessage.ruleName = Program.instance.mic_rulersAll[comboBox2.SelectedIndex].ruler_name;
thisdata.ruleMessage.pixelLength = Program.instance.mic_rulersAll[comboBox2.SelectedIndex].pixel_length;
thisdata.ruleMessage.physicalLength = Program.instance.mic_rulersAll[comboBox2.SelectedIndex].physical_length;
thisdata.ruleMessage.rulerUnits = Program.instance.mic_rulersAll[comboBox2.SelectedIndex].ruler_units;
}
if (this.comboBox1.Visible)
{
if (thisdata.MeasureMaintenanceTreeSpecificDataParentId == "1" || thisdata.MeasureMaintenanceTreeSpecificDataParentId == "2")
{
thisdata.MeasureMaintenanceTreeSpecificIsPos = this.comboBox1.SelectedIndex == 0 ? true : false;
}
else {
this.isChoose = this.comboBox1.SelectedIndex == 0 ? true : false;
this.isRect = this.comboBox1.SelectedIndex == 0 ? true : false;
this.isThreash = this.comboBox1.SelectedIndex == 0 ? true : false;
thisdata.MeasureMaintenanceTreeSpecificIsCon = this.comboBox1.SelectedIndex == 0 ? true : false;
thisdata.MeasureMaintenanceTreeSpecificIsRect = this.comboBox1.SelectedIndex == 0 ? true : false;
thisdata.MeasureMaintenanceTreeSpecificIsThreash = this.comboBox1.SelectedIndex == 0 ? true : false;
}
}
return;
}
if (this.treeViewSort.SelectedNode == null || (this.treeViewSort.SelectedNode.Level < 2)) {
return;
}
if (string.IsNullOrEmpty(textzbieMing.Text))
{
MessageBox.Show(PdnResources.GetString("NewPleaseEnterAlias") + "!");
return;
}
this.lineIDList.Clear();
this.treeViewSort.Focus();
int level = this.treeViewSort.SelectedNode.Level;
string fatherId;
if (level == 2)
{
fatherId = this.treeViewSort.SelectedNode.Name;
}
else
{
fatherId = this.treeViewSort.SelectedNode.Parent.Name;
}
//校验公式合法性
if (!checkFormulaLegitimate(fatherId))
{
MessageBox.Show(PdnResources.GetString("NewLllegalFormula") + "!");
return;
}
MeasureMaintenanceTreeSpecificData data;
this.appWorkspace.RecursionGetData(fatherId, measureMaintenanceTreeData.MeasureMaintenanceTreeDataList, out data);
MeasureMaintenanceTreeSpecificData fatherData;
this.appWorkspace.RecursionGetData(data.MeasureMaintenanceTreeSpecificDataParentId, measureMaintenanceTreeData.MeasureMaintenanceTreeDataList, out fatherData);
MeasureMaintenanceTreeSpecificData grandFatherData;
this.appWorkspace.RecursionGetData(fatherData.MeasureMaintenanceTreeSpecificDataParentId, measureMaintenanceTreeData.MeasureMaintenanceTreeDataList, out grandFatherData);
switch (level) {
case 2:
var treeNode = new TreeNode();
treeNode.Text = textzbieMing.Text;
treeNode.Name = Guid.NewGuid().ToString();
this.treeViewSort.SelectedNode.Nodes.Add(treeNode);
this.treeViewSort.SelectedNode.Expand();
this.treeViewSort.SelectedNode = treeNode;
MeasureMaintenanceFormula measureMaintenanceFormula = new MeasureMaintenanceFormula();
measureMaintenanceFormula.FormulaId = treeNode.Name;
measureMaintenanceFormula.FormulaName = treeNode.Text;
measureMaintenanceFormula.TestItems = data.MeasureMaintenanceTreeSpecificName;
measureMaintenanceFormula.HoleType = fatherData.MeasureMaintenanceTreeSpecificName;
measureMaintenanceFormula.HoleTypeId = fatherData.MeasureMaintenanceTreeSpecificDataId;
measureMaintenanceFormula.FatherHoleTypeId = grandFatherData.MeasureMaintenanceTreeSpecificDataId;
if (data.MeasureMaintenanceTreeSpecificIntervalList.Count == 2)
{
if (string.IsNullOrEmpty(data.MeasureMaintenanceTreeSpecificIntervalList[0]) && !string.IsNullOrEmpty(data.MeasureMaintenanceTreeSpecificIntervalList[1]))
{
measureMaintenanceFormula.Specification = $"X{data.MeasureMaintenanceTreeSpecificIntervalCompareList[1]}{data.MeasureMaintenanceTreeSpecificIntervalList[1]}";
}
else if (string.IsNullOrEmpty(data.MeasureMaintenanceTreeSpecificIntervalList[1]) && string.IsNullOrEmpty(data.MeasureMaintenanceTreeSpecificIntervalList[0]))
{
measureMaintenanceFormula.Specification = "-";
}
else if (string.IsNullOrEmpty(data.MeasureMaintenanceTreeSpecificIntervalList[1]) && !string.IsNullOrEmpty(data.MeasureMaintenanceTreeSpecificIntervalList[0]))
{
measureMaintenanceFormula.Specification = $"{data.MeasureMaintenanceTreeSpecificIntervalList[0]}{data.MeasureMaintenanceTreeSpecificIntervalCompareList[0]}X";
}
else
{
measureMaintenanceFormula.Specification = $"{data.MeasureMaintenanceTreeSpecificIntervalList[0]}{data.MeasureMaintenanceTreeSpecificIntervalCompareList[0]}X{data.MeasureMaintenanceTreeSpecificIntervalCompareList[1]}{data.MeasureMaintenanceTreeSpecificIntervalList[1]}";
}
}
else {
measureMaintenanceFormula.Specification = "-";
}
measureMaintenanceFormula.FormulaParentId = fatherId;
measureMaintenanceFormula.FormulaExpression = this.textBox1.Text;
measureMaintenanceFormula.FormulaExpressionLineID.AddRange(lineIDList);
if (grandFatherData.MeasureMaintenanceTreeSpecificDataId == "9") {
measureMaintenanceFormula.isConductiveCloth = isChoose;
}
if (grandFatherData.MeasureMaintenanceTreeSpecificDataId == "10")
{
measureMaintenanceFormula.isFanweibuchang = isRect;
}
if (true && grandFatherData.MeasureMaintenanceTreeSpecificDataId == "7")
{
measureMaintenanceFormula.isErzhichuli = isThreash;
}
everyFourmulaList.Add(measureMaintenanceFormula);
MeasureMaintenanceTreeSpecificData measureMaintenance = new MeasureMaintenanceTreeSpecificData();
measureMaintenance.MeasureMaintenanceTreeSpecificDataId = treeNode.Name;
measureMaintenance.MeasureMaintenanceTreeSpecificDataParentId = fatherId;
measureMaintenance.MeasureMaintenanceTreeSpecificLevel = 4;
measureMaintenance.MeasureMaintenanceTreeSpecificName = treeNode.Text;
data.MeasureMaintenanceTreeSpecificSonDataList.Add(measureMaintenance);
break;
case 3:
this.treeViewSort.SelectedNode.Text = this.textzbieMing.Text;
var id = this.treeViewSort.SelectedNode.Name;
#region [先删除]
var chooseFData = everyFourmulaList.Where(m => m.FormulaId.Equals(id)).FirstOrDefault();
var chooseIndex = everyFourmulaList.IndexOf(chooseFData);
if (chooseFData != null)
{
everyFourmulaList.Remove(chooseFData);
}
if (data != null)
{
var chooseData = data.MeasureMaintenanceTreeSpecificSonDataList.Where(m => m.MeasureMaintenanceTreeSpecificDataId.Equals(id)).FirstOrDefault();
if (chooseData != null)
{
data.MeasureMaintenanceTreeSpecificSonDataList.Remove(chooseData);
}
}
#endregion
#region [再添加]
MeasureMaintenanceFormula newmeasureMaintenanceFormula = new MeasureMaintenanceFormula();
newmeasureMaintenanceFormula.FormulaId = this.treeViewSort.SelectedNode.Name;
newmeasureMaintenanceFormula.FormulaName = this.treeViewSort.SelectedNode.Text;
newmeasureMaintenanceFormula.TestItems = data.MeasureMaintenanceTreeSpecificName;
newmeasureMaintenanceFormula.HoleType = fatherData.MeasureMaintenanceTreeSpecificName;
newmeasureMaintenanceFormula.HoleTypeId = fatherData.MeasureMaintenanceTreeSpecificDataId;
newmeasureMaintenanceFormula.FatherHoleTypeId = grandFatherData.MeasureMaintenanceTreeSpecificDataId;
//newmeasureMaintenanceFormula.Specification = data.MeasureMaintenanceTreeSpecificIntervalList.Count == 2 ? $"{data.MeasureMaintenanceTreeSpecificIntervalList[0]}{data.MeasureMaintenanceTreeSpecificIntervalCompareList[0]}X{data.MeasureMaintenanceTreeSpecificIntervalCompareList[1]}{data.MeasureMaintenanceTreeSpecificIntervalList[1]}" : "-";
if (data.MeasureMaintenanceTreeSpecificIntervalList.Count == 2)
{
if (string.IsNullOrEmpty(data.MeasureMaintenanceTreeSpecificIntervalList[0]) && !string.IsNullOrEmpty(data.MeasureMaintenanceTreeSpecificIntervalList[1]))
{
newmeasureMaintenanceFormula.Specification = $"X{data.MeasureMaintenanceTreeSpecificIntervalCompareList[1]}{data.MeasureMaintenanceTreeSpecificIntervalList[1]}";
}
else if (string.IsNullOrEmpty(data.MeasureMaintenanceTreeSpecificIntervalList[1]) && string.IsNullOrEmpty(data.MeasureMaintenanceTreeSpecificIntervalList[0]))
{
newmeasureMaintenanceFormula.Specification = "-";
}
else if (string.IsNullOrEmpty(data.MeasureMaintenanceTreeSpecificIntervalList[1]) && !string.IsNullOrEmpty(data.MeasureMaintenanceTreeSpecificIntervalList[0]))
{
newmeasureMaintenanceFormula.Specification = $"{data.MeasureMaintenanceTreeSpecificIntervalList[0]}{data.MeasureMaintenanceTreeSpecificIntervalCompareList[0]}X";
}
else
{
newmeasureMaintenanceFormula.Specification = $"{data.MeasureMaintenanceTreeSpecificIntervalList[0]}{data.MeasureMaintenanceTreeSpecificIntervalCompareList[0]}X{data.MeasureMaintenanceTreeSpecificIntervalCompareList[1]}{data.MeasureMaintenanceTreeSpecificIntervalList[1]}";
}
}
else {
newmeasureMaintenanceFormula.Specification = "-";
}
newmeasureMaintenanceFormula.FormulaParentId = fatherId;
newmeasureMaintenanceFormula.FormulaExpression = this.textBox1.Text;
newmeasureMaintenanceFormula.FormulaExpressionLineID.AddRange(lineIDList);
if (grandFatherData.MeasureMaintenanceTreeSpecificDataId == "9")
{
newmeasureMaintenanceFormula.isConductiveCloth = comboBox1.SelectedIndex == 0 ? true : false;
}
else if (grandFatherData.MeasureMaintenanceTreeSpecificDataId == "10")
{
newmeasureMaintenanceFormula.isFanweibuchang = comboBox1.SelectedIndex == 0 ? true : false;
}
else if (true && grandFatherData.MeasureMaintenanceTreeSpecificDataId == "7")
{
newmeasureMaintenanceFormula.isErzhichuli = comboBox1.SelectedIndex == 0 ? true : false;
}
everyFourmulaList.Insert(chooseIndex, newmeasureMaintenanceFormula);
MeasureMaintenanceTreeSpecificData newmeasureMaintenance = new MeasureMaintenanceTreeSpecificData();
newmeasureMaintenance.MeasureMaintenanceTreeSpecificDataId = this.treeViewSort.SelectedNode.Name;
newmeasureMaintenance.MeasureMaintenanceTreeSpecificDataParentId = fatherId;
newmeasureMaintenance.MeasureMaintenanceTreeSpecificLevel = 4;
newmeasureMaintenance.MeasureMaintenanceTreeSpecificName = this.treeViewSort.SelectedNode.Text;
data.MeasureMaintenanceTreeSpecificSonDataList.Add(newmeasureMaintenance);
#endregion
break;
}
}
//輸入公式
public List gongshiText = new List();
private void listCeliangxian_MouseDown(object sender, MouseEventArgs e)
{
var treeNode = this.treeViewSort.SelectedNode;
if (treeNode.Level != 3 && treeNode.Level != 2) {
return;
}
string id;
switch (treeNode.Level)
{
case 2:
id = treeNode.Parent.Name;
break;
case 3:
id = treeNode.Parent.Parent.Name;
break;
default:
id = string.Empty;
break;
}
int selectedIndex = listCeliangxian.SelectedIndex;
List list;
this.fourmulaParametersList.TryGetValue(id, out list);
string name;
try
{
name = list[selectedIndex].FormulaParameterAliasName;
gongshiText.Add(name);
AddLabelButton();
}
catch (Exception ex)
{
return;
}
}
private void buttonJIa_Click(object sender, EventArgs e)
{
gongshiText.Add(EnumHelper.GetEnumDesc(FormulaSymbolType.Plus));
AddLabelButton();
}
//减号
private void buttonJian_Click(object sender, EventArgs e)
{
gongshiText.Add(EnumHelper.GetEnumDesc(FormulaSymbolType.Less));
AddLabelButton();
}
//乘号
private void buttonCheng_Click(object sender, EventArgs e)
{
gongshiText.Add(EnumHelper.GetEnumDesc(FormulaSymbolType.Multiply));
AddLabelButton();
}
//除号
private void buttonChu_Click(object sender, EventArgs e)
{
gongshiText.Add(EnumHelper.GetEnumDesc(FormulaSymbolType.Division));
AddLabelButton();
}
//左括号
private void buttonZuokuohao_Click(object sender, EventArgs e)
{
gongshiText.Add(EnumHelper.GetEnumDesc(FormulaSymbolType.LeftParenthesis));
AddLabelButton();
}
//右括号
private void buttonYoukuohao_Click(object sender, EventArgs e)
{
gongshiText.Add(EnumHelper.GetEnumDesc(FormulaSymbolType.RightParenthesis));
AddLabelButton();
}
///
/// 刪除檢驗項目
///
private void toolStripMenuDelete1_Click(object sender, EventArgs e)
{
if (this.treeViewSort.SelectedNode != null && this.treeViewSort.SelectedNode.Level > 1)
{
var treeNode = this.treeViewSort.SelectedNode;
everyFourmulaList.RemoveAll(m => m.FormulaParentId.Equals(treeNode.Name));
MeasureMaintenanceTreeSpecificData data;
this.appWorkspace.RecursionGetData(treeNode.Name, measureMaintenanceTreeData.MeasureMaintenanceTreeDataList, out data);
if (data != null)
{
MeasureMaintenanceTreeSpecificData grandFatherData;
this.appWorkspace.RecursionGetData(data.MeasureMaintenanceTreeSpecificDataParentId, measureMaintenanceTreeData.MeasureMaintenanceTreeDataList, out grandFatherData);
if (grandFatherData != null) {
grandFatherData.MeasureMaintenanceTreeSpecificSonDataList.Remove(data);
}
}
this.treeViewSort.SelectedNode.Remove();
}
}
///
/// 刪除測量綫
///
private void buttonDelete_Click(object sender, EventArgs e)
{
if (this.treeViewSort.SelectedNode == null || this.treeViewSort.SelectedNode.Level != 3)
{
return;
}
var id = this.treeViewSort.SelectedNode.Name;
var fatherId = this.treeViewSort.SelectedNode.Parent.Name;
var chooseFData = everyFourmulaList.Where(m => m.FormulaId.Equals(id)).FirstOrDefault();
if (chooseFData != null)
{
everyFourmulaList.Remove(chooseFData);
}
MeasureMaintenanceTreeSpecificData data;
this.appWorkspace.RecursionGetData(fatherId, measureMaintenanceTreeData.MeasureMaintenanceTreeDataList, out data);
if (data != null)
{
var chooseData = data.MeasureMaintenanceTreeSpecificSonDataList.Where(m => m.MeasureMaintenanceTreeSpecificDataId.Equals(id)).FirstOrDefault();
if (chooseData != null)
{
data.MeasureMaintenanceTreeSpecificSonDataList.Remove(chooseData);
}
}
this.treeViewSort.Focus();
var treeView = this.treeViewSort.SelectedNode.Parent;
treeView.Nodes.Remove(this.treeViewSort.SelectedNode);
this.treeViewSort.SelectedNode = treeView;
}
///
/// 确认按钮,保存到XML
///
private void buttonDetermine_Click(object sender, EventArgs e)
{
for (int i = 0; i < everyFourmulaList.Count; i++) {
if (everyFourmulaList[i].FatherHoleTypeId == "9")
{
everyFourmulaList[i].isConductiveCloth = isChoose;
}
if (everyFourmulaList[i].FatherHoleTypeId == "10")
{
everyFourmulaList[i].isFanweibuchang = isRect;
}
if (true && everyFourmulaList[i].FatherHoleTypeId == "7")
{
everyFourmulaList[i].isErzhichuli = isThreash;
}
}
WriteXml();
TransferEvent(everyFourmulaList);
this.Close();
}
///
/// 写入XML
///
public void WriteXml()
{
string filePath = Application.StartupPath + "\\Config\\" + Program.instance.SettingPrefix + "\\MeasureMaintenanceType\\" + fileName + ".xml";
string stageModelXml = XmlSerializeHelper.XmlSerialize(measureMaintenanceTreeData);
FileOperationHelper.WriteStringToFile(stageModelXml, filePath, FileMode.Create);
}
///
/// 取消按钮,不保存并关闭窗口
///
private void buttonCancel_Click(object sender, EventArgs e)
{
DialogResult result = MessageBox.Show(PdnResources.GetString("NewConfirmation") + PdnResources.GetString("NewCancel") + "?", "", MessageBoxButtons.OKCancel);
if (result == DialogResult.OK)
{
//ClearNodes();
this.Close();
}
}
private void AddLabelButton()
{
//int abc = this.textBox1.SelectionStart;
this.textBox1.Text += gongshiText[gongshiText.Count - 1];
//this.textBox1.SelectionStart = this.textBox1.Text.Length;
}
//關閉窗口時清除節點
private void MeasureSetUp_FormClosing(object sender, FormClosingEventArgs e)
{
//ClearNodes();
}
///
/// 判断公式是否合法
///
private bool checkFormulaLegitimate(string fatherID)
{
#region[原先的校验方法]
//string formula = this.textBox1.Text;
////先判断括号 是不是成对出现
//if (formula.Contains("("))
//{
// if (!formula.Contains(")"))
// {
// return false;
// }
// int leftBrackets = formula.Split('(').Length - 1;
// int rightBrackets = formula.Split(')').Length - 1;
// if (leftBrackets != rightBrackets)
// {
// //MessageBox.Show("公式不合法!");
// return false;
// }
// //去除符号的干扰
// formula = formula.Replace('(', ' ');
// formula = formula.Replace(')', ' ');
//}
//else if (formula.Contains(")"))
//{
// if (!formula.Contains("("))
// {
// return false;
// }
// int leftBrackets = formula.Split('(').Length - 1;
// int rightBrackets = formula.Split(')').Length - 1;
// if (leftBrackets != rightBrackets)
// {
// //MessageBox.Show("公式不合法!");
// return false;
// }
// //去除符号的干扰
// formula = formula.Replace('(', ' ');
// formula = formula.Replace(')', ' ');
//}
//if (formula.Contains("最大值") || formula.Contains("最小值") || formula.Contains("平均值"))
//{
// if (formula.Contains("-") || formula.Contains("*") || formula.Contains("/"))
// {
// return false;
// }
//}
//List parList = new List();
//foreach (var item in this.parametersList)
//{
// parList.Add(item.FormulaParameterAliasName);
//}
//string[] elementArray = formula.Split(symbolArray, StringSplitOptions.None);
//foreach (var item in elementArray)
//{
// var datastr = item.Trim();
// //判断是不是空的
// if (string.IsNullOrEmpty(datastr))
// {
// return false;
// }
// //判断是不是数字
// if (checkIsNum(datastr))
// {
// continue;
// }
// //去除最大值 最小值 平均值的干扰
// if (datastr.Contains("最大值") || datastr.Contains("最小值") || datastr.Contains("平均值"))
// {
// var str = datastr.Split('\\').ToList();
// str.RemoveAt(str.Count - 1);
// foreach (var everyStr in str)
// {
// if (!parList.Contains(everyStr))
// {
// return false;
// }
// }
// }
// else
// {
// if (!parList.Contains(datastr))
// {
// return false;
// }
// }
//}
//foreach (var item in this.parametersList)
//{
// if (formula.Contains(item.FormulaParameterAliasName))
// {
// this.lineIDList.Add(item.FormulaParametersId);
// }
//}
//return true;
#endregion
// 校验最大值 最小值 平均值
string formula = this.textBox1.Text;
string realFormula = this.textBox1.Text;
var driver = new CodeDriver();
List parList = new List();
if (formula.Contains("最大值") || formula.Contains("最小值") || formula.Contains("平均值"))
{
if (formula.Contains("-") || formula.Contains("*") || formula.Contains("/"))
{
return false;
}
}
foreach (var item in this.parametersList)
{
parList.Add(item.FormulaParameterAliasName);
}
string[] stat = new string[] { "最大值", "最小值", "平均值" };
string[] elementArray = formula.Split(symbolArray, StringSplitOptions.None);
foreach (var item in elementArray)
{
var datastr = item.Trim();
//去除最大值 最小值 平均值的干扰
if (datastr.Contains("最大值") || datastr.Contains("最小值") || datastr.Contains("平均值"))
{
var str = datastr.Split('\\').ToList();
str.RemoveAt(str.Count - 1);
foreach (var everyStr in str)
{
if (!parList.Contains(everyStr))
{
return false;
}
}
}
}
int parentheses = 0, Bracket = 0;
bool IsSymbol = false;
foreach(char a in formula)
{
if(a == '+' || a == '-')
{
if (IsSymbol)
{
return false;
}
IsSymbol = true;
}
else
{
IsSymbol = false;
}
}
int temp = 0, temp2 = 0;
foreach(char a in formula)
{
if(a == '(')
{
parentheses++;
}
if (a == ')')
{
parentheses--;
}
if (a == '[')
{
Bracket++;
}
if (a == ']')
{
Bracket--;
}
if (Bracket < 0 || parentheses < 0)
{
return false;
}
}
if (Bracket != 0 || parentheses != 0)
{
return false;
}
// 去除其他符号的影响校验公式的合法性
formula = formula.Replace("[", "(");
formula = formula.Replace("]", ")");
formula = formula.Replace(@"\最大值", "");
formula = formula.Replace(@"\最小值", "");
formula = formula.Replace(@"\平均值", "");
bool isError;
foreach (string param in parList)
{
formula = formula.Replace("\\" + param, "");
}
foreach (string param in parList)
{
formula = formula.Replace(param, "param");
}
formula = formula.Replace("/", "-");
driver.CompileAndRun(formula, out isError);
if (isError)
{
return false;
}
foreach (var item in this.parametersList)
{
if (realFormula.Contains(item.FormulaParameterAliasName))
{
this.lineIDList.Add(item.FormulaParametersId);
}
}
return true;
}
///
/// 判断是否是数字
///
///
///
private bool checkIsNum(string num)
{
try
{
int strNum = Convert.ToInt32(num);
return true;
}
catch (Exception)
{
return false;
}
}
///
/// 最大值 最小值 平均值
///
///
///
private void button_Click(object sender, EventArgs e)
{
string buttonText = ((Button)sender).Text;
this.textBox1.Text += (button4.Text + buttonText);
}
private void button4_Click(object sender, EventArgs e)
{
string buttonText = ((Button)sender).Text;
this.textBox1.Text += buttonText;
}
private void txt_GotFocus(object sender, EventArgs e)
{
this.textBox1.Select(this.textBox1.TextLength, 0);//光标定位到文本最后
this.textBox1.ScrollToCaret();//滚动到光标处
}
private void button5_Click(object sender, EventArgs e)
{
string buttonText = ((Button)sender).Text;
this.textBox1.Text += buttonText;
}
private void buttonAbsoValLeft_Click(object sender, EventArgs e)
{
string buttonText = ((Button)sender).Text;
this.textBox1.Text += buttonText;
}
public class CodeDriver : MarshalByRefObject
{
private string prefix =
"using System;" +
"public class Driver" +
"{" +
" public static void Run()" +
" {" +
"int param = 1;" +
"int i = ";
private string postfix =
" }" +
"}";
private string semicolon = ";";
private string print = "Console.WriteLine(i.ToString());";
public int CompileAndRun(string input, out bool hasError)
{
hasError = false;
string returnData = null;
int IreturnData = 0;
CompilerResults results = null;
using (var provider = new CSharpCodeProvider())
{
var options = new CompilerParameters();
options.GenerateInMemory = true;
var sb = string.Empty;
sb += prefix;
sb += (input);
sb += (semicolon);
sb += (print);
sb += (postfix);
results = provider.CompileAssemblyFromSource(
options, sb.ToString());
}
if (results.Errors.HasErrors)
{
hasError = true;
return IreturnData;
//var errorMessage = new StringBuilder();
//foreach (CompilerError error in results.Errors)
//{
// errorMessage.AppendFormat("{0} {1}", error.Line,
// error.ErrorText);
//}
//returnData = errorMessage.ToString();
}
else
{
TextWriter temp = Console.Out;
var writer = new StringWriter();
Console.SetOut(writer);
Type driverType = results.CompiledAssembly.GetType("Driver");
try
{
driverType.InvokeMember("Run", BindingFlags.InvokeMethod |
BindingFlags.Static | BindingFlags.Public,
null, null, null);
}
catch
{
hasError = true;
return IreturnData;
}
Console.SetOut(temp);
returnData = writer.ToString();
IreturnData = Convert.ToInt32(returnData);
}
return IreturnData;
}
}
}
}