Я должен написать код ниже, когда я запускаю его, он говорит
System.IndexOutOfRangeException: L'index выходит за пределы таблицы. в AddWindowsForm.MyForm.ReadCSV (StreamReader str) ind: \ weiweiwang \ signalisationferroviaire \ visual studio 2012 \ projects \ addwindowsform1213 \ addwindowsform1213 \ myform.h: строка 7738 в AddWindowsForm.MyForm.OpenFileDialogCSV_FileOk (Отправитель объекта, CancelEventArgs e) в d: \ weiweiwang \ signalisationferroviaire \ visual studio 2012 \ projects \ addwindowsform1213 \ addwindowsform1213 \ myform.h: строка 7728 в System.Windows.Forms.FileDialog.OnFileOk (CancelEventArgs e) в System.Windows.Forms.FileDialog.HandleVistaFileOk (диалоговое окно IFileDialog)
Я не понимаю почему …
private: System::Void OpenFileDialogCSV_FileOk(System::Object^ sender, System::ComponentModel::CancelEventArgs^ e) {
InitialiserDonnees();
strFileDirectoryName=OpenFileDialogCSV->InitialDirectory+OpenFileDialogCSV->FileName;
StreamReader ^strReadFile=gcnew StreamReader (strFileDirectoryName);
String ^strL="";
MyForm::Text="Aide aux calculs des distances:" + System::IO::Path::GetFileName(OpenFileDialogCSV->FileName);
ReadCSV(strReadFile);
}public: void ReadCSV ( StreamReader ^str)
{
array<String^>^temp=gcnew array <String^> {"","","","","","","","","","",""};
String ^strL="";
//Read Info Poste et track
strL=str->ReadLine();
strL=str->ReadLine();
temp=strL->Split(';');
textBoxNomPoste->Text=temp[1];
strL=str->ReadLine();
temp=strL->Split(';');
textBoxNomVoie2->Text=temp[1];
strL=str->ReadLine();
temp=strL->Split(';');
comboBoxImpairPair->Text=temp[1];
strL=str->ReadLine();
temp=strL->Split(';');
ComboBoxNbDeclivite->Text=temp[1];
}
System.IndexOutOfRangeException
исключение означает, что вы обращаетесь к массиву или контейнеру с недопустимым индексом. То есть индекс относится к элементу, который не существует. В коде вы используете индексирование массива при доступе к temp
массив. Вы пытаетесь получить доступ к элементу с индексом 1 здесь:
temp[1]
Ошибка сообщает вам, что temp
не содержит элемент с индексом 1.
Вы назначены temp
Вот:
temp=strL->Split(';');
Очевидно, что результат этого звонка Split()
массив с менее чем 2 элементами Проверьте содержание strL
чтобы понять, почему это так.
Обратите внимание, что эта строка кода:
array<String^>^temp=gcnew array <String^> {"","","","","","","","","","",""};
совершенно бессмысленно, потому что вы никогда не читаете значение temp
перед присвоением другого значения.
Других решений пока нет …