Files

793 lines
21 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.IO;
using System.Text;
using System.Threading;
using System.Windows.Forms;
namespace LP;
public class FormCurrent : Form
{
private delegate void delegateFormSetTitle(Form form, string value);
private delegate void delegateListBoxItemsClear(ListBox listBox);
private delegate void delegateListBoxAdd(ListBox listBox, string value);
private delegate void delegateListBoxSelectedIndex(ListBox listBox, int value);
private delegate void delegateTextBoxSetText(TextBox textBox, string value);
private delegate void delegateButtonEnabled(Button button, bool value);
private delegate void delegateFormHide(Form form);
public FormDesktop desktop = null;
public string mTitle = "";
public XianLuData mXianLuData = null;
public TaskData mTaskData = null;
private int mXianLuID = 0;
public string mNameXianLu = "";
private string mNameTask = "";
public int mIndexControl_XianLuName = -1;
public int mIndex_ListXianLuData = -1;
public string mFileName = "";
public string[] mFileCurrentArr = null;
private bool mAfterInit = false;
private bool mReady_XianLuName = false;
private bool mReady_CurrentFile = false;
private bool mBusy_ButtonOK = false;
private IContainer components = null;
private Label label1;
private ListBox listBox_XianLuName;
private Label label2;
private TextBox textBox_DS_FileName;
private Button buttonCancel;
private Button buttonOK;
private Button buttonSelect;
public bool Ready_XianLuName
{
get
{
return mReady_XianLuName;
}
set
{
mReady_XianLuName = value;
}
}
public bool Ready_CurrentFile
{
get
{
return mReady_CurrentFile;
}
set
{
mReady_CurrentFile = value;
}
}
public bool Busy_ButtonOK
{
get
{
return mBusy_ButtonOK;
}
set
{
mBusy_ButtonOK = value;
MyButtonEnabled(buttonCancel, !value);
MyButtonEnabled(buttonSelect, !value);
}
}
public FormCurrent()
{
InitializeComponent();
if (mXianLuData == null)
{
mXianLuData = new XianLuData();
}
if (mTaskData == null)
{
mTaskData = new TaskData();
}
mNameTask = "雷电流幅值计算";
mTitle = "雷电流幅值统计";
mIndexControl_XianLuName = -1;
mIndex_ListXianLuData = -1;
}
private void FormCurrent_Load(object sender, EventArgs e)
{
mAfterInit = false;
Busy_ButtonOK = false;
MyFormSetTitle(this, "");
bool ready_CurrentFile = (Ready_XianLuName = false);
Ready_CurrentFile = ready_CurrentFile;
base.DialogResult = DialogResult.None;
MyInput_TaskData();
MyInput_List_XianLuData();
mAfterInit = true;
}
private void FormCurrent_FormClosing(object sender, FormClosingEventArgs e)
{
}
public void MyInput_TaskData()
{
mTaskData.copyFrom_TaskData(desktop.mDlg_CanShuJiSuan.mtData);
}
public void MyOutput_TaskData()
{
desktop.mDlg_CanShuJiSuan.mtData.copyFrom_TaskData(mTaskData);
}
public void MyInput_List_XianLuData()
{
MyListBoxItemsClear(listBox_XianLuName);
if (desktop.mXL == null || desktop.mXL.mListXianLuData == null)
{
return;
}
for (int i = 0; i < desktop.mXL.mListXianLuData.Count; i++)
{
MyListBoxAdd(listBox_XianLuName, desktop.mXL.mListXianLuData[i].mName_XianLu);
}
if (mIndexControl_XianLuName < 0)
{
mIndexControl_XianLuName = 0;
}
if (mIndexControl_XianLuName >= 0 && mIndexControl_XianLuName < listBox_XianLuName.Items.Count)
{
MyListBoxSelectedIndex(listBox_XianLuName, mIndexControl_XianLuName);
mNameXianLu = listBox_XianLuName.SelectedItem.ToString();
for (int j = 0; j < desktop.mXL.mListXianLuData.Count; j++)
{
if (mNameXianLu.Equals(desktop.mXL.mListXianLuData[j].mName_XianLu))
{
mXianLuData.CopyFrom_XianLuData(desktop.mXL.mListXianLuData[j]);
mXianLuID = mXianLuData.mID_XianLu;
break;
}
}
Ready_XianLuName = true;
}
else
{
mNameXianLu = "";
mXianLuID = 0;
Ready_XianLuName = false;
}
string text = textBox_DS_FileName.Text.Trim();
string[] separator = new string[4] { "\r", "\n", " ", ";" };
if (string.IsNullOrEmpty(text))
{
return;
}
string[] array = text.Split(separator, StringSplitOptions.RemoveEmptyEntries);
bool flag = true;
for (int k = 0; k < array.Length; k++)
{
if (!File.Exists(array[k]))
{
flag = false;
break;
}
}
if (array.Length != 0)
{
mFileCurrentArr = new string[array.Length];
for (int l = 0; l < array.Length; l++)
{
mFileCurrentArr[l] = array[l].Trim();
}
}
if (flag)
{
Ready_CurrentFile = true;
}
}
public void Destroy()
{
if (mXianLuData != null)
{
mXianLuData.Destroy();
}
mXianLuData = null;
if (mTaskData != null)
{
mTaskData.Destroy();
}
mTaskData = null;
if (mFileCurrentArr != null)
{
for (int i = 0; i < mFileCurrentArr.Length; i++)
{
mFileCurrentArr[i] = "";
}
mFileCurrentArr = null;
}
}
private void buttonOK_Click(object sender, EventArgs e)
{
MyFormSetTitle(this, "");
if (!Busy_ButtonOK)
{
Busy_ButtonOK = true;
if (!Ready_CurrentFile)
{
MyFormSetTitle(this, "请选择雷电文件,点击按钮“" + buttonOK.Text + "”。");
buttonSelect.Focus();
Busy_ButtonOK = false;
}
else
{
Thread thread = new Thread(MyCompute);
thread.Start();
}
}
}
private bool IsRepeatTask()
{
bool result = false;
for (int i = 0; i < desktop.mTask.mListDetails.Count; i++)
{
if (mNameTask.Equals(desktop.mTask.mListDetails[i].mTaskData.mName_Task) && mXianLuID == desktop.mTask.mListDetails[i].mTaskData.mXianLuID_Task)
{
result = true;
break;
}
}
return result;
}
private void MyRefresh_TaskData()
{
mTaskData.mID_Task = TaskData.mNextID_static;
mTaskData.mTypeCode_Task = 11;
mTaskData.mName_Task = mNameTask;
mTaskData.mXianLuID_Task = mXianLuData.mID_XianLu;
mTaskData.mXianLuName_Task = mXianLuData.mName_XianLu;
mTaskData.mXianLuJLZL_Task = mXianLuData.mJLZL_XianLu;
mTaskData.mDYDJ_Task = mXianLuData.mDYDJ_XianLu;
mTaskData.mPrepare11_LightingCurrent = 0;
mXianLuData.mPrepare1_LightingCurrent = 0;
for (int i = 0; i < desktop.mXL.mListXianLuData.Count; i++)
{
if (mXianLuID == desktop.mXL.mListXianLuData[i].mID_XianLu)
{
desktop.mXL.mListXianLuData[i].mPrepare1_LightingCurrent = 0;
break;
}
}
string text = "";
int num = 0;
for (int j = 0; j < mFileCurrentArr.Length; j++)
{
if (!string.IsNullOrEmpty(mFileCurrentArr[j]))
{
if (num > 0)
{
text += " ";
}
text += mFileCurrentArr[j];
num++;
}
}
mTaskData.mFName_Prepare = text;
}
private void MyCompute()
{
string text = "";
MyFormSetTitle(this, "请稍候......(0/2)");
text = Compute_A_and_B();
if (!text.Equals("OK"))
{
MyLog.AddLog("MyCompute() " + text);
}
Busy_ButtonOK = false;
base.DialogResult = DialogResult.OK;
MyFormHide(this);
}
private string Compute_A_and_B()
{
string result = "OK";
double num = 0.0;
double num2 = 0.0;
double num3 = 0.0;
string text = "";
bool flag = false;
int num4 = 0;
int num5 = 0;
int num6 = 0;
int index = 0;
int index2 = 0;
double num7 = 1.0;
double num8 = -1.0;
double num9 = 0.0;
try
{
if (string.IsNullOrEmpty(mFileName))
{
return "雷电流文件名mFileName为空。";
}
if (!File.Exists(mFileName))
{
return "文件未找到,mFileName=" + mFileName;
}
List<double> list = new List<double>();
list.Clear();
List<double> list2 = new List<double>();
list2.Clear();
List<double> list3 = new List<double>();
list3.Clear();
using (FileStream fileStream = new FileStream(mFileName, FileMode.Open, FileAccess.Read, FileShare.None))
{
using (StreamReader streamReader = new StreamReader(fileStream, Encoding.UTF8))
{
while (!streamReader.EndOfStream)
{
text = streamReader.ReadLine().Trim();
if (string.IsNullOrEmpty(text))
{
continue;
}
flag = false;
try
{
num = Convert.ToDouble(text);
}
catch (Exception)
{
flag = true;
}
if (!flag)
{
if (num < 0.0)
{
num = 0.0 - num;
}
list.Add(num);
}
}
streamReader.Close();
}
fileStream.Close();
}
MyFormSetTitle(this, "请稍候......(1/2)");
if (list.Count == 0)
{
return "文件内容空白,mFileName=" + mFileName;
}
num5 = list.Count;
for (int i = 0; i < list.Count; i++)
{
if (i == 0)
{
num2 = (num3 = list[i]);
continue;
}
if (num2 < list[i])
{
num2 = list[i];
}
if (num3 > list[i])
{
num3 = list[i];
}
}
list2.Add(num2);
list3.Add(1.0 / (double)num5);
while (num2 > num3)
{
num2 -= 0.1;
list2.Add(num2);
num4 = 0;
for (int j = 0; j < list.Count; j++)
{
if (list[j] >= num2)
{
num4++;
}
}
list3.Add((double)num4 * 1.0 / (double)num5);
}
num6 = list3.Count;
num7 = 1.0;
num8 = -1.0;
for (num4 = 0; num4 < num6; num4++)
{
num9 = list3[num4] - 0.5;
if (num9 < 0.0)
{
if (num8 < num9)
{
num8 = num9;
index2 = num4;
}
}
else if (num7 > num9)
{
num7 = num9;
index = num4;
}
}
double num10 = 0.0;
double num11 = 0.0;
num10 = (0.5 - list3[index]) * (list2[index2] - list2[index]) / (list3[index2] - list3[index]) + list2[index];
double num12 = 0.0;
double num13 = 0.0;
for (num4 = 0; num4 < num6 - 1; num4++)
{
num13 = Math.Log(1.0 / list3[num4] - 1.0) / Math.Log(list2[num4] / num10);
num12 += num13;
}
num11 = num12 / (double)(num6 - 1);
desktop.mXL.mCurrent_a_All_GanTa = Math.Round(num10, 3);
desktop.mXL.mCurrent_b_All_GanTa = Math.Round(num11, 3);
desktop.mXL.mCurrent_a_b_Ready = true;
for (int k = 0; k < desktop.mXL.mListXianLuData.Count; k++)
{
if (desktop.mXL.mListXianLuData[k] != null)
{
desktop.mXL.mListXianLuData[k].mPrepare1_LightingCurrent = 1;
}
}
if (desktop.mXL != null && desktop.mXL.mListGanTas != null)
{
for (int l = 0; l < desktop.mXL.mListGanTas.Count; l++)
{
if (desktop.mXL.mListGanTas[l].mListGanTaData != null)
{
for (int m = 0; m < desktop.mXL.mListGanTas[l].mListGanTaData.Count; m++)
{
desktop.mXL.mListGanTas[l].mListGanTaData[m].mCurrent_a_GanTa = desktop.mXL.mCurrent_a_All_GanTa;
desktop.mXL.mListGanTas[l].mListGanTaData[m].mCurrent_b_GanTa = desktop.mXL.mCurrent_b_All_GanTa;
}
}
}
}
if (desktop.mTask != null && desktop.mTask.mListDetails != null)
{
for (int n = 0; n < desktop.mTask.mListDetails.Count; n++)
{
if (desktop.mTask.mListDetails[n] == null || desktop.mTask.mListDetails[n].mTaskGroup == null || desktop.mTask.mListDetails[n].mTaskGroup.mListExTaskData == null)
{
continue;
}
for (num4 = 0; num4 < desktop.mTask.mListDetails[n].mTaskGroup.mListExTaskData.Count; num4++)
{
if (desktop.mTask.mListDetails[n].mTaskGroup.mListExTaskData[num4] != null && desktop.mTask.mListDetails[n].mTaskGroup.mListExTaskData[num4].mTGanTas != null && desktop.mTask.mListDetails[n].mTaskGroup.mListExTaskData[num4].mTGanTas.mListTGanTaData != null)
{
for (int num14 = 0; num14 < desktop.mTask.mListDetails[n].mTaskGroup.mListExTaskData[num4].mTGanTas.mListTGanTaData.Count; num14++)
{
desktop.mTask.mListDetails[n].mTaskGroup.mListExTaskData[num4].mTGanTas.mListTGanTaData[num14].mCurrent_a_GanTa = desktop.mXL.mCurrent_a_All_GanTa;
desktop.mTask.mListDetails[n].mTaskGroup.mListExTaskData[num4].mTGanTas.mListTGanTaData[num14].mCurrent_b_GanTa = desktop.mXL.mCurrent_b_All_GanTa;
}
}
}
}
}
MyFormSetTitle(this, "请稍候......(2/2)");
}
catch (Exception ex2)
{
result = "Compute_A_and_B() ex=" + ex2.Message;
}
return result;
}
private void buttonCancel_Click(object sender, EventArgs e)
{
MyFormSetTitle(this, "");
MyButtonEnabled(buttonCancel, value: false);
Thread thread = new Thread(MyCancel);
thread.Start();
}
private void MyCancel()
{
MyFormSetTitle(this, "取消—");
MyFormSetTitle(this, "取消———");
base.DialogResult = DialogResult.Cancel;
MyFormHide(this);
}
private void buttonSelect_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.InitialDirectory = Application.StartupPath;
openFileDialog.Filter = "所有文件*.*|*.*|Excel文件(*.csv)|*.csv|Txt文件(*.txt)|*.txt";
openFileDialog.FilterIndex = 3;
openFileDialog.Multiselect = false;
if (openFileDialog.ShowDialog(this) == DialogResult.OK)
{
mFileName = openFileDialog.FileName;
MyTextBoxSetText(textBox_DS_FileName, mFileName);
Ready_CurrentFile = true;
}
}
private void listBox_XianLuName_SelectedIndexChanged(object sender, EventArgs e)
{
if (!mAfterInit || Busy_ButtonOK)
{
return;
}
int selectedIndex = ((ListBox)sender).SelectedIndex;
mIndexControl_XianLuName = selectedIndex;
mNameXianLu = ((ListBox)sender).SelectedItem.ToString().Trim();
for (int i = 0; i < desktop.mXL.mListXianLuData.Count; i++)
{
if (mNameXianLu.Equals(desktop.mXL.mListXianLuData[i].mName_XianLu))
{
mIndex_ListXianLuData = i;
mXianLuData.CopyFrom_XianLuData(desktop.mXL.mListXianLuData[i]);
mXianLuID = mXianLuData.mID_XianLu;
Ready_XianLuName = true;
break;
}
}
}
private void textBox_DS_FileName_Leave(object sender, EventArgs e)
{
if (!mAfterInit || Busy_ButtonOK)
{
return;
}
Ready_CurrentFile = false;
string text = textBox_DS_FileName.Text.Trim();
string[] separator = new string[4] { "\r", "\n", " ", ";" };
string[] array = null;
if (string.IsNullOrEmpty(text))
{
return;
}
array = text.Split(separator, StringSplitOptions.RemoveEmptyEntries);
bool ready_CurrentFile = true;
for (int i = 0; i < array.Length; i++)
{
if (!File.Exists(array[i]))
{
ready_CurrentFile = false;
break;
}
}
if (array.Length != 0)
{
mFileCurrentArr = new string[array.Length];
for (int j = 0; j < array.Length; j++)
{
mFileCurrentArr[j] = array[j].Trim();
}
}
Ready_CurrentFile = ready_CurrentFile;
}
public void MyFormSetTitle(Form form, string value)
{
if (form.InvokeRequired)
{
delegateFormSetTitle method = MyFormSetTitle;
form.Invoke(method, form, value);
return;
}
if (string.IsNullOrEmpty(value))
{
form.Text = mTitle;
}
if (!string.IsNullOrEmpty(value))
{
form.Text = mTitle + " " + value;
}
}
public void MyListBoxItemsClear(ListBox listBox)
{
if (listBox.InvokeRequired)
{
delegateListBoxItemsClear method = MyListBoxItemsClear;
listBox.Invoke(method, listBox);
}
else
{
listBox.Items.Clear();
}
}
public void MyListBoxAdd(ListBox listBox, string value)
{
if (listBox.InvokeRequired)
{
delegateListBoxAdd method = MyListBoxAdd;
listBox.Invoke(method, listBox, value);
}
else if (!string.IsNullOrEmpty(value))
{
listBox.Items.Add(value);
}
}
public void MyListBoxSelectedIndex(ListBox listBox, int value)
{
if (listBox.InvokeRequired)
{
delegateListBoxSelectedIndex method = MyListBoxSelectedIndex;
listBox.Invoke(method, listBox, value);
}
else if (value >= 0 && value < listBox.Items.Count)
{
listBox.SelectedIndex = value;
}
}
public void MyTextBoxSetText(TextBox textBox, string value)
{
if (textBox.InvokeRequired)
{
delegateTextBoxSetText method = MyTextBoxSetText;
textBox.Invoke(method, textBox, value);
}
else
{
textBox.Text = value;
}
}
public void MyButtonEnabled(Button button, bool value)
{
if (button.InvokeRequired)
{
delegateButtonEnabled method = MyButtonEnabled;
button.Invoke(method, button, value);
}
else
{
button.Enabled = value;
}
}
public void MyFormHide(Form form)
{
try
{
if (form.InvokeRequired)
{
delegateFormHide method = MyFormHide;
form.Invoke(method, form);
}
else
{
form.Hide();
}
}
catch (Exception)
{
}
}
protected override void Dispose(bool disposing)
{
if (disposing && components != null)
{
components.Dispose();
}
base.Dispose(disposing);
}
private void InitializeComponent()
{
this.label1 = new System.Windows.Forms.Label();
this.listBox_XianLuName = new System.Windows.Forms.ListBox();
this.label2 = new System.Windows.Forms.Label();
this.textBox_DS_FileName = new System.Windows.Forms.TextBox();
this.buttonCancel = new System.Windows.Forms.Button();
this.buttonOK = new System.Windows.Forms.Button();
this.buttonSelect = new System.Windows.Forms.Button();
base.SuspendLayout();
this.label1.AutoSize = true;
this.label1.Font = new System.Drawing.Font("宋体", 12f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134);
this.label1.Location = new System.Drawing.Point(33, 17);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(72, 16);
this.label1.TabIndex = 0;
this.label1.Text = "线路名称";
this.listBox_XianLuName.Font = new System.Drawing.Font("宋体", 12f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134);
this.listBox_XianLuName.FormattingEnabled = true;
this.listBox_XianLuName.ItemHeight = 16;
this.listBox_XianLuName.Location = new System.Drawing.Point(33, 42);
this.listBox_XianLuName.Name = "listBox_XianLuName";
this.listBox_XianLuName.Size = new System.Drawing.Size(356, 20);
this.listBox_XianLuName.TabIndex = 0;
this.listBox_XianLuName.SelectedIndexChanged += new System.EventHandler(listBox_XianLuName_SelectedIndexChanged);
this.label2.AutoSize = true;
this.label2.Font = new System.Drawing.Font("宋体", 12f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134);
this.label2.Location = new System.Drawing.Point(33, 103);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(120, 16);
this.label2.TabIndex = 0;
this.label2.Text = "雷电流数据文件";
this.textBox_DS_FileName.Font = new System.Drawing.Font("宋体", 12f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134);
this.textBox_DS_FileName.Location = new System.Drawing.Point(33, 135);
this.textBox_DS_FileName.Name = "textBox_DS_FileName";
this.textBox_DS_FileName.Size = new System.Drawing.Size(290, 26);
this.textBox_DS_FileName.TabIndex = 1;
this.textBox_DS_FileName.Leave += new System.EventHandler(textBox_DS_FileName_Leave);
this.buttonCancel.Location = new System.Drawing.Point(281, 183);
this.buttonCancel.Name = "buttonCancel";
this.buttonCancel.Size = new System.Drawing.Size(108, 28);
this.buttonCancel.TabIndex = 4;
this.buttonCancel.Text = "取消";
this.buttonCancel.UseVisualStyleBackColor = true;
this.buttonCancel.Click += new System.EventHandler(buttonCancel_Click);
this.buttonOK.Location = new System.Drawing.Point(146, 183);
this.buttonOK.Name = "buttonOK";
this.buttonOK.Size = new System.Drawing.Size(108, 28);
this.buttonOK.TabIndex = 3;
this.buttonOK.Text = "确定";
this.buttonOK.UseVisualStyleBackColor = true;
this.buttonOK.Click += new System.EventHandler(buttonOK_Click);
this.buttonSelect.Location = new System.Drawing.Point(340, 133);
this.buttonSelect.Name = "buttonSelect";
this.buttonSelect.Size = new System.Drawing.Size(49, 28);
this.buttonSelect.TabIndex = 2;
this.buttonSelect.Text = "选择";
this.buttonSelect.UseVisualStyleBackColor = true;
this.buttonSelect.Click += new System.EventHandler(buttonSelect_Click);
base.AutoScaleDimensions = new System.Drawing.SizeF(6f, 12f);
base.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
base.ClientSize = new System.Drawing.Size(417, 228);
base.Controls.Add(this.buttonCancel);
base.Controls.Add(this.buttonSelect);
base.Controls.Add(this.buttonOK);
base.Controls.Add(this.textBox_DS_FileName);
base.Controls.Add(this.listBox_XianLuName);
base.Controls.Add(this.label2);
base.Controls.Add(this.label1);
base.Name = "FormCurrent";
base.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "FormCurrent";
base.FormClosing += new System.Windows.Forms.FormClosingEventHandler(FormCurrent_FormClosing);
base.Load += new System.EventHandler(FormCurrent_Load);
base.ResumeLayout(false);
base.PerformLayout();
}
}