当新的实例C ++ / CLI创建被覆盖类的成员被覆、实例、成员、CLI

2023-09-03 08:17:42 作者:习惯被你宠爱

我试图实现以下内容:

1)创建一个包含管理型阵列类 2)创建这个类的三个实例 3)填写从三个不同的数据文件,这些阵​​列。 4)执行此数据的分析

1) Create a class that contains managed arrays 2) Create three instances of this class 3) Fill those arrays from three different data files. 4) Perform an analysis of this data

我已经能够编译code,执行任务的数字一和二,然而,当我填的是后续实例的阵列,他们似乎覆盖的previous那些数据。我曾尝试使用,而不是一类的结构。我曾尝试使用本地阵列,而不是管理型阵列。我显然失去了一些东西,但我找不到,我看我的答案任何地方。也许我不知道这个术语来正确地问我的问题。

I have been able to compile code that performs task numbers one and two, however when I fill the arrays of the subsequent instances they seem to overwrite the data of the previous ones. I have tried to use a structure instead of a class. I have tried to use native arrays instead of managed arrays. I am obviously missing something here, but I can't find my answer anywhere that I have looked. Maybe I don't know the terminology to ask my question correctly.

此外,当我使用的调试器,我发现垃圾收集器似乎要删除我的数据,我才完成我的分析就可以了。

Also, when I used the debugger I found that the garbage collector seemed to delete my data before I could perform my analysis on it.

任何帮助将是AP preciated。

Any help would be appreciated.

的问题是,在类实例洛韦是覆盖米德当按钮加载第二文件被推动。

The problem is that the class instance LowE is overwritten with MedE when the button to load the second file is pushed.

我试着问这个问题,而不发布整个项目code和不成功所以,这里是我有:

I tried to ask this question without posting the entire project code and was not successful So, here is what I have:

文件runData.h

File runData.h

#pragma once

#define MAXPOINTS 1536
#define LDBL_MAX 1.7976931348623158e+308
#define MAXORDER 10
#define MAXVOLUME 100.0


using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Diagnostics;


namespace EDCCalApp02 {


 public ref class  runData //:  public System::ComponentModel::Component
{
public:

       static array<double^> ^WPcoefs  = gcnew array<double^>(MAXORDER+1);

        static array<double ^,2> ^fData1  = gcnew array<double^,2>(MAXPOINTS,7);

       static array<int^,2> ^iData1  = gcnew array<int^,2>(MAXPOINTS,7);

        static array<int^,2> ^DataSize  = gcnew array<int^,2>(3,3);


      int numLines; 
      int numCols;
      int indx;
      int drops;


    runData(void)
    {


         for (int n = 0; n<1536; n++) {

             fData1[n,0] = 0.0;
             iData1[n,5] = 0;
             iData1[n,6] = 0; 
         }


    }


private:

    System::ComponentModel::Container ^components;

#pragma region Windows Form Designer generated code

    void InitializeComponent(void)
    {
        components = gcnew System::ComponentModel::Container();
    }
#pragma endregion


};


}

文件Form1.h

File Form1.h

#pragma once

#define MAXPOINTS 1536
#define LDBL_MAX 1.7976931348623158e+308
#define MAXORDER 10
#define MAXVOLUME 100.0

#include "runData.h"
#include "Graph1.h"
#include "Global1.h"

namespace EDCCalApp02 {

using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
using namespace System::IO;

array<double^> ^polyfit(array<double^,2> ^, int, int);
array<double^,2>  ^datasort(array<double^,2> ^, int);
double ldpow(  double , unsigned );
float poly_correlcoef( array<double^,2> ^ ,int, array<double^> ^, int  );
array<double^> ^get_xy_max_min( array<double^,2> ^ ,int );


array<double^,2> ^fillData(int,  array<double^> ^, runData ^ );
array<double^,2> ^makeCurve(array<double^,2> ^, array<double^,2> ^, array<double^,2> ^, double);
array<double^,2> ^makeCoefs(array<double^,2> ^, array<double^> ^);
runData  ^LoadData(array<String^> ^);

public ref class Form1 : public System::Windows::Forms::Form
{
public:
    Form1(void)
    {
        InitializeComponent();


        int numLines = 0, numCols=0;


  try{
  System::IO::StreamReader ^ sr = gcnew
  System::IO::StreamReader("WellPlate Volume Definitions.txt");
  array<String^> ^lines= System::IO::File::ReadAllLines("WellPlate Volume Definitions.txt");

  numLines = lines->Length;
  array<String^> ^Header=lines[0]->Split(',');
  numCols = Header->Length;

  staVolFile = gcnew array<String^,2>(numLines,numCols);

  for(int i=1;i<numLines;i++) {

     array<String^> ^lineSplit=lines[i]->Split(',');

     for(int j=0;j<numCols;j++){
       staVolFile[i-1,j] = lineSplit[j];
       }

     cbx_WellPlateList->Items->Add(staVolFile[i-1,0]);
    }

         sr->Close();
  }
            catch(IOException ^)       {
    MessageBox::Show(L"WellPlate Volume Definitions.txt\n\n" 
        L"Was Not Read\n\n"
        L"Please Check the File\n"
        L"and Try Again");

        }

    }

protected:

    ~Form1()
    {
        if (components)
        {
            delete components;
        }
    }
private: System::Windows::Forms::TextBox^  tbx_File1;
protected: 

protected: 
private: System::Windows::Forms::Label^  lbl_File1;
private: System::Windows::Forms::ComboBox^  cbx_WellPlateList;
private: System::Windows::Forms::TextBox^  tbx_File2;
private: System::Windows::Forms::TextBox^  tbx_File3;

private: System::Windows::Forms::Label^  lbl_Volume;
private: System::Windows::Forms::Button^  btn_Exit;

private:
public:

     array<String^,2>  ^staVolFile;
     static array<bool^> ^loaded = gcnew array<bool^>(4) {false,false,false,false};


    static  runData ^LowE = ( gcnew runData);
    static  runData ^MedE = ( gcnew runData);
    static  runData ^HighE = (gcnew runData);

private: System::Windows::Forms::OpenFileDialog^  openFileDialog1;
private: System::Windows::Forms::SaveFileDialog^  saveFileDialog1;

    System::ComponentModel::Container ^components;

#pragma region Windows Form Designer generated code

    void InitializeComponent(void)
    {
        System::ComponentModel::ComponentResourceManager^  resources = (gcnew System::ComponentModel::ComponentResourceManager(Form1::typeid));
        this->tbx_File1 = (gcnew System::Windows::Forms::TextBox());
        this->lbl_File1 = (gcnew System::Windows::Forms::Label());
        this->cbx_WellPlateList = (gcnew     System::Windows::Forms::ComboBox());

        this->btn_Exit = (gcnew System::Windows::Forms::Button());
        this->openFileDialog1 = (gcnew System::Windows::Forms::OpenFileDialog());
        this->saveFileDialog1 = (gcnew System::Windows::Forms::SaveFileDialog());
        this->SuspendLayout();
        // 
        // tbx_File1
        // 
        this->tbx_File1->Location = System::Drawing::Point(40, 100);
        this->tbx_File1->Name = L"tbx_File1";
        this->tbx_File1->Size = System::Drawing::Size(267, 20);
        this->tbx_File1->TabIndex = 0;
        this->tbx_File1->Text = L"Enter .csv File 1";

        // cbx_WellPlateList
        // 
        this->cbx_WellPlateList->FormattingEnabled = true;
        this->cbx_WellPlateList->Location = System::Drawing::Point(40, 40);
        this->cbx_WellPlateList->Name = L"cbx_WellPlateList";
        this->cbx_WellPlateList->Size = System::Drawing::Size(221, 21);
        this->cbx_WellPlateList->TabIndex = 2;
        this->cbx_WellPlateList->SelectedIndexChanged += gcnew System::EventHandler(this, &Form1::cbx_WellPlateList_SelectedIndexChanged);


        this->btnFile1->AutoSizeMode = System::Windows::Forms::AutoSizeMode::GrowAndShrink;
        this->btnFile1->Location = System::Drawing::Point(306, 98);
        this->btnFile1->Name = L"btnFile1";
        this->btnFile1->Size = System::Drawing::Size(25, 24);
        this->btnFile1->TabIndex = 7;
        this->btnFile1->UseVisualStyleBackColor = true;
        this->btnFile1->Click += gcnew System::EventHandler(this, &Form1::btnFile1_Click);

        // lbl_WellplateList
        // 
        this->lbl_WellplateList->Anchor = static_cast<System::Windows::Forms::AnchorStyles>((((System::Windows::Forms::AnchorStyles::Top | System::Windows::Forms::AnchorStyles::Bottom) 
            | System::Windows::Forms::AnchorStyles::Left) 
            | System::Windows::Forms::AnchorStyles::Right));
        this->lbl_WellplateList->AutoSize = true;
        this->lbl_WellplateList->Location = System::Drawing::Point(45, 25);
        this->lbl_WellplateList->Name = L"lbl_WellplateList";
        this->lbl_WellplateList->Size = System::Drawing::Size(98, 13);
        this->lbl_WellplateList->TabIndex = 28;
        this->lbl_WellplateList->Text = L"Wellplate Selection";
        // 
        // btn_Graph1
        // 
        this->btn_Graph1->BackColor = System::Drawing::Color::White;
        this->btn_Graph1->Location = System::Drawing::Point(348, 99);
        this->btn_Graph1->Name = L"btn_Graph1";
        this->btn_Graph1->Size = System::Drawing::Size(38, 23);
        this->btn_Graph1->TabIndex = 29;
        this->btn_Graph1->Text = L"G1";
        this->btn_Graph1->UseVisualStyleBackColor = true;
        this->btn_Graph1->Click += gcnew System::EventHandler(this, &Form1::btn_Graph1_Click);

        // 
        // btn_Create
        // 
        this->btn_Create->Anchor = static_cast<System::Windows::Forms::AnchorStyles>((System::Windows::Forms::AnchorStyles::Bottom | System::Windows::Forms::AnchorStyles::Left));
        this->btn_Create->Location = System::Drawing::Point(40, 292);
        this->btn_Create->Name = L"btn_Create";
        this->btn_Create->Size = System::Drawing::Size(75, 23);
        this->btn_Create->TabIndex = 33;
        this->btn_Create->Text = L"Create Cal";
        this->btn_Create->UseVisualStyleBackColor = true;
        this->btn_Create->Click += gcnew System::EventHandler(this, &Form1::btn_Create_Click);


        this->btn_Exit->Anchor = System::Windows::Forms::AnchorStyles::Bottom;
        this->btn_Exit->Location = System::Drawing::Point(657, 304);
        this->btn_Exit->Name = L"btn_Exit";
        this->btn_Exit->Size = System::Drawing::Size(75, 23);
        this->btn_Exit->TabIndex = 36;
        this->btn_Exit->Text = L"Exit";
        this->btn_Exit->UseVisualStyleBackColor = true;
        this->btn_Exit->Click += gcnew System::EventHandler(this, &Form1::btn_Exit_Click);

        this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
        this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
        this->BackColor = System::Drawing::Color::White;
        this->BackgroundImage = (cli::safe_cast<System::Drawing::Image^  >(resources->GetObject(L"$this.BackgroundImage")));
        this->BackgroundImageLayout = System::Windows::Forms::ImageLayout::Stretch;
        this->ClientSize = System::Drawing::Size(830, 348);
        this->Controls->Add(this->btn_Exit);
        this->Controls->Add(this->btn_Graph1);
        this->Controls->Add(this->lbl_WellplateList);

        this->Controls->Add(this->lbl_Order1);

        this->Controls->Add(this->lbl_Max1);
        this->Controls->Add(this->lbl_Min1);
        this->Controls->Add(this->tbx_Order1);


        this->Controls->Add(this->cbx_WellPlateList);
        this->Controls->Add(this->lbl_File1);
        this->Controls->Add(this->tbx_File1);
        this->Icon = (cli::safe_cast<System::Drawing::Icon^  >(resources->GetObject(L"$this.Icon")));
        this->Name = L"Form1";
        this->Text = L"EDC Calibration App";
        this->ResumeLayout(false);
        this->PerformLayout();

    }

杂endregion

私人:系统:虚空cbx_WellPlateList_SelectedIndexChanged(系统:对象^发件人,系统:: EventArgs的^ E){

pragma endregion

private: System::Void cbx_WellPlateList_SelectedIndexChanged(System::Object^ sender, System::EventArgs^ e) {

          double WPcoefs[MAXORDER+1];// = gcnew array<double^>(MAXORDER+1);

          int selectedIndex = cbx_WellPlateList->SelectedIndex;

          for(int i=0; i <= MAXORDER; i++) WPcoefs[i]=0.0;


          for(int i=3;i<8;i++){

          WPcoefs[i-3] = double::Parse(staVolFile[selectedIndex,i]);
          }

          for(int i=0;i<MAXORDER+1;i++){
                LowE->WPcoefs[i] = WPcoefs[i];
                MedE->WPcoefs[i] = WPcoefs[i];
                HighE->WPcoefs[i] = WPcoefs[i];
          }
  loaded[0] = true;


      }

        private: System::Void btnFile1_Click(System::Object^  sender, System::EventArgs^  e) {


    if(!*loaded[0]) {
        MessageBox::Show("Please select a plate and try again.");
        return;
    }
  try {     
     if(openFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK)
  {
      System::IO::StreamReader ^ sr = gcnew
      System::IO::StreamReader(openFileDialog1->FileName);

如果(!SR)    {       tbx_File1->文本=无法打开文件。

if (!sr) { tbx_File1->Text = "Could not open file.";

}

 String^ FilePath = openFileDialog1->FileName;
  array<String^> ^File = FilePath->Split('\\');
     int  num = File->Length;
 tbx_File1->Text = File[num-1];

  array<String^> ^rawData1= System::IO::File::ReadAllLines(openFileDialog1->FileName);

  LowE =  LoadData(rawData1);


     loaded[1] = true;
     sr->Close(); 
     }

  }
            catch(IOException ^)
   {

    MessageBox::Show("File Not Read\n Please Check the File\n and Try Again");
    return;
            }   
                 }  

私人:系统:虚空btnFile2_Click(系统:对象^发件人,系统:: EventArgs的^ E){

private: System::Void btnFile2_Click(System::Object^ sender, System::EventArgs^ e) {

                if(!*loaded[0]) {
        MessageBox::Show("Please select a plate and try again.");
        return;
    }
  try {     
     if(openFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK)
  {
      System::IO::StreamReader ^ sr = gcnew
      System::IO::StreamReader(openFileDialog1->FileName);

如果(!SR)    {       tbx_File2->文本=无法打开文件。

if (!sr) { tbx_File2->Text = "Could not open file.";

}

 String^ FilePath = openFileDialog1->FileName;
  array<String^> ^File = FilePath->Split('\\');
     int  num = File->Length;
 tbx_File2->Text = File[num-1];

  array<String^> ^rawData2= System::IO::File::ReadAllLines(openFileDialog1->FileName);


  MedE =   LoadData(rawData2);


     loaded[2] = true;
     sr->Close(); 
     }

  }
            catch(IOException ^)
   {

    MessageBox::Show("File Not Read\n Please Check the File\n and Try Again");
    return;
            }   


     }

私人:系统:虚空btnFile3_Click(系统:对象^发件人,系统:: EventArgs的^ E){

private: System::Void btnFile3_Click(System::Object^ sender, System::EventArgs^ e) {

                if(!*loaded[0]) {
        MessageBox::Show("Please select a plate and try again.");
        return;
    }
  try {     
     if(openFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK)
  {
      System::IO::StreamReader ^ sr = gcnew
      System::IO::StreamReader(openFileDialog1->FileName);

如果(!SR)    {       tbx_File3->文本=无法打开文件。

if (!sr) { tbx_File3->Text = "Could not open file.";

}

 String^ FilePath = openFileDialog1->FileName;
  array<String^> ^File = FilePath->Split('\\');
     int  num = File->Length;
 tbx_File3->Text = File[num-1];

  array<String^> ^rawData3= System::IO::File::ReadAllLines(openFileDialog1->FileName);


  HighE =     LoadData(rawData3);


     loaded[3] = true;
     sr->Close(); 
     }

  }
            catch(IOException ^)
   {

    MessageBox::Show("File Not Read\n Please Check the File\n and Try Again");
    return;
            }   


     }

私人:系统:虚空btn_Exit_Click(系统:对象^发件人,系统:: EventArgs的^ E){

private: System::Void btn_Exit_Click(System::Object^ sender, System::EventArgs^ e) {

         this->Close();
     }

私人:系统:虚空btn_Graph1_Click(系统:对象^发件人,系统:: EventArgs的^ E){

private: System::Void btn_Graph1_Click(System::Object^ sender, System::EventArgs^ e) {

         int Size = LowE->indx;

         if(Size > 3){
         array<double^,2> ^plotData =  gcnew array<double^,2>(Size,4);
         array<double^,2> ^fitData =  gcnew array<double^,2>(Size,2);
         double Min = Convert::ToDouble(tbx_Min1->Text);
         double Max = Convert::ToDouble(tbx_Max1->Text);
         int Ord = Convert::ToInt32(tbx_Order1->Text);
         double Vol;
         int count = 0;
         int iData;
         for(int i=1; i < Size-1 ; i++){
            if((*LowE->fData1[i,0] <= Max) && (*LowE->fData1[i,0] >= Min )){
                Vol = ((*LowE->fData1[i,6] / *LowE->iData1[i,4]));
                if(Vol > -1.0*MAXVOLUME && Vol < MAXVOLUME){
                    plotData[count,0] = *LowE->fData1[i,0];
                    fitData[count,0] = *plotData[count,0];
                    iData = (int) (100.0 * *plotData[count,0]);
                    plotData[count,0] = iData / 100.0;
                    plotData[count,1] = Vol;
                    fitData[count,1] = Vol;
                    count++;

                }
            }
         }
                array<double^> ^plotCoefs = gcnew array<double^>(MAXORDER +1);
                plotCoefs = polyfit(fitData,count-1,Ord);
                double Delta = (Max + 0.2)/count;

                plotData[0,2] = 0.0;

                for(int i=0; i < count; i++) {
                double LLOrd = 1.0;
                plotData[i,3] = 0.0;
                if(i>0) plotData[i,2] = *plotData[i-1,2] + Delta;
                 for(int k=0; k <= Ord; k++) {
                     plotData[i,3] = *plotData[i,3] +*plotCoefs[k] * LLOrd;
                     LLOrd = LLOrd * *plotData[i,2];
                 }

                }
                if(count > 2){
              Graph1^ plot1 = gcnew Graph1(count-1,plotData);

              plot1->ShowDialog();
                } else{
                            MessageBox::Show(" Not Enough Valid Data\n Please Check the File\n and Try Again");
                }
                } else{
                            MessageBox::Show(" File Does Not Contain Enough Data\n Please Check the File\n and Try Again");
                }

     }

私人:系统:虚空btn_Graph2_Click(系统:对象^发件人,系统:: EventArgs的^ E){

private: System::Void btn_Graph2_Click(System::Object^ sender, System::EventArgs^ e) {

         int Size = MedE->indx;

         if(Size > 3){
         array<double^,2> ^plotData =  gcnew array<double^,2>(Size,4);
         array<double^,2> ^fitData =  gcnew array<double^,2>(Size,2);
         double Min = Convert::ToDouble(tbx_Min2->Text);
         double Max = Convert::ToDouble(tbx_Max2->Text);
         int Ord = Convert::ToInt32(tbx_Order2->Text);
         double Vol;
         int count = 0;
         int iData;
         for(int i=1; i < Size-1 ; i++){
            if((*MedE->fData1[i,0] <= Max) && (*MedE->fData1[i,0] >= Min )){
                Vol = ((*MedE->fData1[i,6] / *MedE->iData1[i,4]));
                if(Vol > -1.0*MAXVOLUME && Vol < MAXVOLUME){
                    plotData[count,0] = *MedE->fData1[i,0];
                    fitData[count,0] = *plotData[count,0];
                    iData = (int) (100.0 * *plotData[count,0]);
                    plotData[count,0] = iData / 100.0;
                    plotData[count,1] = Vol;
                    fitData[count,1] = Vol;
                    count++;

                }
            }
         }
                array<double^> ^plotCoefs = gcnew array<double^>(MAXORDER +1);
                plotCoefs = polyfit(fitData,count-1,Ord);
                double Delta = (Max + 0.2)/count;

                plotData[0,2] = 0.0;

                for(int i=0; i < count; i++) {
                double LLOrd = 1.0;
                plotData[i,3] = 0.0;
                if(i>0) plotData[i,2] = *plotData[i-1,2] + Delta;
                 for(int k=0; k <= Ord; k++) {
                     plotData[i,3] = *plotData[i,3] +*plotCoefs[k] * LLOrd;
                     LLOrd = LLOrd * *plotData[i,2];
                 }

                }
                if(count > 2){
              Graph1^ plot1 = gcnew Graph1(count-1,plotData);

              plot1->ShowDialog();
                } else{
                            MessageBox::Show(" Not Enough Valid Data\n Please Check the File\n and Try Again");
                }
                } else{
                            MessageBox::Show(" File Does Not Contain Enough Data\n Please Check the File\n and Try Again");
                }


     }

私人:系统:虚空btn_Graph3_Click(系统:对象^发件人,系统:: EventArgs的^ E){

private: System::Void btn_Graph3_Click(System::Object^ sender, System::EventArgs^ e) {

         int Size = HighE->indx;

         if(Size > 3){
         array<double^,2> ^plotData =  gcnew array<double^,2>(Size,4);
         array<double^,2> ^fitData =  gcnew array<double^,2>(Size,2);
         double Min = Convert::ToDouble(tbx_Min3->Text);
         double Max = Convert::ToDouble(tbx_Max3->Text);
         int Ord = Convert::ToInt32(tbx_Order3->Text);
         double Vol;
         int count = 0;
         int iData;
         for(int i=1; i < Size-1 ; i++){
            if((*HighE->fData1[i,0] <= Max) && (*HighE->fData1[i,0] >= Min )){
                Vol = ((*HighE->fData1[i,6] / *HighE->iData1[i,4]));
                if(Vol > -1.0*MAXVOLUME && Vol < MAXVOLUME){
                    plotData[count,0] = *HighE->fData1[i,0];
                    fitData[count,0] = *plotData[count,0];
                    iData = (int) (100.0 * *plotData[count,0]);
                    plotData[count,0] = iData / 100.0;
                    plotData[count,1] = Vol;
                    fitData[count,1] = Vol;
                    count++;

                }
            }
         }
                array<double^> ^plotCoefs = gcnew array<double^>(MAXORDER +1);
                plotCoefs = polyfit(fitData,count-1,Ord);
                double Delta = (Max + 0.2)/count;

                plotData[0,2] = 0.0;

                for(int i=0; i < count; i++) {
                double LLOrd = 1.0;
                plotData[i,3] = 0.0;
                if(i>0) plotData[i,2] = *plotData[i-1,2] + Delta;
                 for(int k=0; k <= Ord; k++) {
                     plotData[i,3] = *plotData[i,3] +*plotCoefs[k] * LLOrd;
                     LLOrd = LLOrd * *plotData[i,2];
                 }

                }
                if(count > 2){
              Graph1^ plot1 = gcnew Graph1(count-1,plotData);

              plot1->ShowDialog();
                } else{
                            MessageBox::Show(" Not Enough Valid Data\n Please Check the File\n and Try Again");
                }
                } else{
                            MessageBox::Show(" File Does Not Contain Enough Data\n Please Check the File\n and Try Again");
                }



     }

私人:系统:虚空btn_Create_Click(系统:对象^发件人,系统:: EventArgs的^ E){

private: System::Void btn_Create_Click(System::Object^ sender, System::EventArgs^ e) {

             int i=0;

             array<double^> ^Args1 = gcnew array<double^>(6) {0.0,0.0,2.0,5.0,3.0,3.0};
             array<double^> ^Args2 = gcnew array<double^>(6) {0.0,0.0,2.0,5.0,3.0,3.0};
             array<double^> ^Args3 = gcnew array<double^>(6) {0.0,0.0,2.0,5.0,3.0,3.0};

             array<double^,2> ^Coefs1 = gcnew array<double^,2>(MAXORDER +4, 4);
             array<double^,2> ^Coefs2 = gcnew array<double^,2>(MAXORDER +4, 4);
             array<double^,2> ^Coefs3 = gcnew array<double^,2>(MAXORDER +4, 4);

             array<double^,2> ^Curve = gcnew array<double^,2>(36, 4);

             int minSz = LowE->indx;
             int midSz = MedE->indx;
             int maxSz = HighE->indx;


             double Vol = (Convert::ToDouble(tbx_Volume->Text));

                array<double^,2> ^minData,  ^medData, ^maxData;
                Args1[0] = (Convert::ToDouble(tbx_Min1->Text));
                Args1[1] = (Convert::ToDouble(tbx_Max1->Text));
                Args1[2] = (Convert::ToDouble(tbx_Order1->Text));

                minData = fillData(minSz, Args1, LowE);
                Coefs1 = makeCoefs(minData,Args1);

                Args2[0] = (Convert::ToDouble(tbx_Min2->Text));
                Args2[1] = (Convert::ToDouble(tbx_Max2->Text));
                Args2[2] = (Convert::ToDouble(tbx_Order2->Text));

                medData = fillData(minSz, Args2, MedE);
                Coefs2 = makeCoefs(medData,Args1);

                Args3[0] = (Convert::ToDouble(tbx_Min3->Text));
                Args3[1] = (Convert::ToDouble(tbx_Max3->Text));
                Args3[2] = (Convert::ToDouble(tbx_Order3->Text));

                maxData = fillData(minSz, Args3, HighE);
                Coefs3 = makeCoefs(maxData,Args1);

                Curve = makeCurve(Coefs1,Coefs2,Coefs3,Vol);


    array<String^,2> ^calFile = gcnew array<String^,2>(36,4);
    double tempDouble; 


   String ^myfile = "";
   saveFileDialog1->ShowDialog() ;
   myfile = saveFileDialog1->FileName;

   try  {

     FileStream ^outFile = gcnew FileStream(myfile, FileMode::Create, FileAccess::Write);
     StreamWriter ^streamOut = gcnew StreamWriter(outFile);

      for(i=0; i<36; i++){
    tempDouble = *Curve[i,0];
    calFile[i,0] = tempDouble.ToString("F2");
    tempDouble = *Curve[i,1];
    calFile[i,1] = tempDouble.ToString("F0");
    tempDouble = *Curve[i,2];
    calFile[i,2] = tempDouble.ToString("F2");
    tempDouble = *Curve[i,3];
    calFile[i,3] = tempDouble.ToString("F2");


          streamOut->WriteLine( "{0}\t{1}\t{2}\t{3}\t{1}\t{1}\t{1}\t{1}\t{1}\t{1}\t{1}\t{1}",calFile[i,0], calFile[i,1], calFile[i,2],calFile[i,3] );


      }
     streamOut->Close();
   }

   catch(IOException ^)
   {

    MessageBox::Show("File Not Written\n Please Check the File\n and Try Again");

   } 




     }

};

array<double^,2> ^makeCurve(array<double^,2> ^Coef1, array<double^,2> ^Coef2, array<double^,2> ^Coef3, double Vol) { 

    array<double^,2> ^Curve = gcnew array<double^,2>(36, 4);
    array<double^,3> ^Funct = gcnew array<double^,3>(3,4,36);

             array<double^> ^LLmin = gcnew array<double^>(3);
             array<double^> ^LLmax = gcnew array<double^>(3);
             array<int^> ^Order = gcnew array<int^>(3);


             LLmin[0] = *Coef1[0,0];
             LLmin[1] = *Coef2[0,0];
             LLmin[2] = *Coef3[0,0];
             LLmax[0] = *Coef1[1,0];
             LLmax[1] = *Coef2[1,0];
             LLmax[2] = *Coef3[1,0];

             Order[0] = (int) *Coef1[2,0];
             Order[1] = (int) *Coef2[2,0];
             Order[2] = (int) *Coef3[2,0];


             double maxLLcut = 0.0;
             double minLLcut = *LLmax[0];

             for(int n=0; n<3; n++) {
                if( maxLLcut < *LLmax[n]) maxLLcut = *LLmax[n];
                if( minLLcut > *LLmax[n]) minLLcut = *LLmax[n];
             }
             int npts = 36;
             if(maxLLcut != minLLcut){
                npts = 35;

             }

             double LL = 0.05;

             double DeltaLL;
             double LLOrd = 1.0; 

             DeltaLL = minLLcut/((float) npts - 1.0);

             for(int i=1; i < npts ; i++) {
                 Curve[i,0] = LL;

                 for (int n = 0; n < 4 ; n++) {

                     // Use polynomial coefs to calculate Volume
                 LLOrd = 1.0;
                 for(int k=3; k < *Coef1[2,n]+3; k++) {
                     Funct[0,n,i] = *Funct[0,n,i] +*Coef1[k,n] * LLOrd;
                     LLOrd = LLOrd *LL;
                 }
                 LLOrd = 1.0;
                 for(int k=3; k < *Coef2[2,n]+3; k++) {
                     Funct[1,n,i] = *Funct[1,n,i] +*Coef2[k,n] * LLOrd;
                     LLOrd = LLOrd *LL;
                 }
                 LLOrd = 1.0;
                 for(int k=3; k < *Coef3[2,n]+3; k++) {
                     Funct[2,n,i] = *Funct[2,n,i] +*Coef3[k,n] * LLOrd;
                     LLOrd = LLOrd *LL;
                 }



                 }

                    double BurstPerNl = 0.0;
                    double BurstInt = 0.0;
            for(int j = 0; j<4; j++) {
                    if(*Funct[iL,j+1,i] == *Funct[iH,j+1,i]){
                        Curve[i,j+1] = *Funct[iCr,j+1,i];
                    }else{
                     BurstPerNl = (*Funct[iL,j+1,i] - *Funct[iH,j+1,i])/(*Funct[iL,0,i] - *Funct[iH,0,i]);
                     BurstInt = *Funct[iCr,1,i] - BurstPerNl * *Funct[iCr,j+1,i];

                     Curve[i,j+1] = BurstPerNl * (Vol - *Funct[iCr,0,i]) + *Funct[iCr,j+1,i];
                    }
            }
             LL = LL + DeltaLL;
        }

             if (npts < 36){

                    Curve[35,0] = maxLLcut;

                for (int l = 1; l<4; l++) {

                    Curve[35,l] = ((*Curve[34,l] - *Curve[32,l])/(*Curve[34,0] - *Curve[32,0])) *(*Curve[35,0] - *Curve[34,0]) + *Curve[34,l];
                }

             }

    return Curve;

         }

array<double^,2> ^makeCoefs(array<double^, 2> ^Data, array<double^> ^Args) { 

    array<double^> ^tempCoefs = gcnew array<double^>(MAXORDER +1);
    array<double^,2> ^Coefs = gcnew array<double^,2>(MAXORDER +4, 4);

    int Size;
    Size = Data->Length / 8;

    array<double^,2> ^tempE = gcnew array<double^,2>(Size+100,2);

    for(int k=0; k<Size; k++){
    tempE[k,0] = 0.0;
    tempE[k,1] = 0.0;
    }

    int m;
    for(int j=0; j < 4; j++) {
    for(int i = 0; i < Size; i++) {



        m = j*2;

            tempE[i,0] = (double) *Data[i,m];
            tempE[i,1] = (double) *Data[i,m+1];

                }
                int k = j+2;
                int Order = (int) *Args[k];
                tempCoefs = polyfit(tempE, Size-1, Order);

                Coefs[0,j] = *Args[0];
                Coefs[1,j] = *Args[1];
                Coefs[2,j] = *Args[j+2];

                for(int k = 0; k < *Args[j+2]; k++) {

                Coefs[3+k, j] = *tempCoefs[k];

                }

            }
            return Coefs;


       }


array<double^,2> ^fillData(int Num,  array<double^> ^Args, runData ^rawData) {

             // Create data sets to be fit based on cuts
             int j1 = 0;
             double MeasuredVolume;

             array<double^,2> ^Data = gcnew array<double^,2>(Num,8);                 
             for(int i=1; i<Num; i++) { 
                 if(*rawData->fData1[i,0] > *Args[0] && *rawData->fData1[i,0] < *Args[1]){
                 MeasuredVolume = ( *rawData->fData1[i,6])/( *rawData->iData1[i,4]);
                 if(MeasuredVolume > -1.0*MAXVOLUME && MeasuredVolume < MAXVOLUME) {



                 Data[j1,0] =  *rawData->fData1[i,0];
                 Data[j1,1] = ( *rawData->fData1[i,6])/( *rawData->iData1[i,4]);

                 Data[j1,2] =  *rawData->fData1[i,0];
                 Data[j1,3] =  *rawData->fData1[i,3];

                 Data[j1,4] =  *rawData->fData1[i,0];
                 Data[j1,5] =  *rawData->fData1[i,2];

                 Data[j1,6] =  *rawData->fData1[i,0];
                 Data[j1,7] =  *rawData->fData1[i,4];


                     j1++;

                 }
             }
             }
                j1 = j1 - 1;

             array<double^,2> ^newData = gcnew array<double^,2>(j1,8);

// newData = *数据;

// newData = *Data;

             for(int k=0; k<j1; k++){
                 for(int i = 0; i<8; i++){
                 newData[k,i] = *Data[k,i];
                 }
             }
                return newData;

}


    runData  ^LoadData(array<String^> ^ rawData)
    {



     int numLines = 0; 
     int numCols = 0;
     int indx = 0;
     int drops = 0;
     array<String^,2> ^staFile1;

      double WPcoefs[MAXORDER+1]; // [ = gcnew array<double^>(MAXORDER+1);

      numLines = rawData->Length;

      array<String^> ^Header=rawData[0]->Split(',');

      numCols = Header->Length;

      staFile1 = gcnew array<String^,2>(numLines,numCols);

    double temp_d;
    int temp_i;
    runData ^filledData = gcnew runData;

// runData filledData; // =(新runData);

// runData filledData; // = (new runData);

  double vol, LL, deltaV;

  for(int i=0;i<numLines;i++)
  {
    array<String^> ^lineSplit=rawData[i]->Split(',');
    for(int j=0;j<numCols;j++){
      staFile1[i,j] = lineSplit[j];

  }

if(staFile1[i,8] != "11" && staFile1[i,8] != "15") {
    if(i>0){

              filledData->fData1[indx,1] = double::Parse(staFile1[i,27]);
              filledData->fData1[indx,2] = double::Parse(staFile1[i,28]);

              filledData->fData1[indx,3] = double::Parse(staFile1[i,29]);
              array<String^> ^SptFreq = staFile1[i,31]->Split(':');
              filledData->fData1[indx,4] = double::Parse(SptFreq[0]);
              filledData->drops = (double::Parse(staFile1[i,33]));
              filledData->iData1[indx,4] =  filledData->drops;
              LL = *filledData->fData1[indx,0];

                double LLOrd = 1.0;
                vol = 0.0;
                 for(int k=0; k <= MAXORDER; k++) {
                     vol = vol + *filledData->WPcoefs[k] * LLOrd;
                     LLOrd = LLOrd * LL;
                 }


              filledData->fData1[indx,5] = vol;
              if(indx >= 1) {
                  deltaV = *filledData->fData1[indx-1,5] - *filledData->fData1[indx,5];
                  filledData->fData1[indx-1,6] = deltaV * 1000.0;
                if(*filledData->iData1[indx,4] > 0){
                double Vol = ((*filledData->fData1[indx-1,6] / *filledData->iData1[indx,4]));
                if(Vol > -1.0*MAXVOLUME && Vol < MAXVOLUME){
                 indx++;
                    }
                }
              }else{
                  indx++;
              }
        }       
    }
  }

        filledData->numLines = numLines;
        filledData->numCols = numCols;
        filledData->drops = *filledData->iData1[1,4];
        filledData->indx = indx;
        return  filledData;
    }

我希望这是足够的信息。

Hopefully this is enough information.

的问题是,在类实例洛韦是覆盖米德当按钮加载第二文件被推动。

The problem is that the class instance LowE is overwritten with MedE when the button to load the second file is pushed.

推荐答案

所以,事实证明,问题出在声明数组静态的类。显然,我其实想要的是声明变量,但在初始化函数创建它。我试过这个较早,但编译器哽咽,我认为有与做这种方式的一个问题。但是,一旦我下定决心,这是解决方案,我能够使它发挥作用。静态意味着该存储器是相同的这是一种方便的方式来分享共同的一类的所有实例数据的类的所有实例。我意识到,我可以用这个在同级别另一个阵列,将不再需要读取每个时间。

So, it turns out that the problem was with declaring the array static in the class. Apparently what I actually wanted was to declare the variable but create it in the initialization function. I had tried this earlier, but the compiler choked and I thought that there was a problem with doing it this way. But, once I was determined that this was the solution I was able to make it work. Static means that the memory is the same for all instances of the class which is a convenient way to share data common to all instances of a class. I realized that I could use this for another array in the same class that would no longer need to be read in each time.