2013-10-08 5 views
0

У меня есть эти текстовые поля, в которых пользователь вводит данные, а затем нажимает кнопку для обработки данных. Теперь данные, введенные пользователем, очень много и дают пользователю некоторую слабину, которую я хочу сделать возможной, когда вы нажимаете кнопку, приложение сохраняет данные, поэтому, когда вы закрываете приложение и запускаете его обратно, текстовые поля заполняются с последними введенными данными.Сохранять текст в текстовых ячейках

Я думал об использовании .txt-файла для сохранения данных. Только я нашел некоторые трудности с этим. Одна из проблем заключается в том, что я все время получаю сообщение от Microsoft .NET Framework каждый раз, когда пытаюсь запустить приложение. В окне сообщения указано, что индекс находился за пределами массива. Хотя я считаю, что мой код не превышает границы моего массива.

А вот код, который я использую:

Сначала я объявил массив и заполнить его с переменными, которые содержат содержание текстовых полей:

string[]settings = new string[5]; 
settings[0] = openKey; 
settings[1] = secretKey; 
settings[2] = statusRequestPath; 
settings[3] = statusRequestAPI; 
settings[4] = setSeconds.ToString(); 

Затем я использую следующий код для записи данные в текстовый файл.

using (StreamWriter writeFile = new StreamWriter(@"C:\Audio Silence Detector\AudioSilenceDetector.txt")) 
{ 
    foreach (string line in settings) 
    { 
     writeFile.WriteLine(line); 
    } 
} 

И поставить текст .txt файл обратно в приложение я поместил это в formload:

string[] lines = System.IO.File.ReadAllLines(@"C:\Audio Silence Detector\AudioSilenceDetector.txt"); 

tbOpenKey.Text = lines[0]; 
tbSecretKey.Text = lines[1]; 
tbStatusRequestPath.Text = lines[2]; 
tbStatusRequestAPI.Text = lines[3]; 
tbSeconds.Text = lines[4]; 

Я изменил код, чтобы это, и это, похоже, закрепилась вопрос У меня было:

  if (lines.LongLength == 5) 
     { 
      tbOpenKey.Text = lines[0]; 
      tbSecretKey.Text = lines[1]; 
      tbStatusRequestPath.Text = lines[2]; 
      tbStatusRequestAPI.Text = lines[3]; 
      tbSeconds.Text = lines[4]; 
     } 
+3

Какая линия получает исключение IndexOutOfBounds? Я подозреваю, что вы открыли приложение в первый раз, и нет текстового файла для чтения или его пустого файла. –

+0

как @NicolasTyler, сделайте проверку перед заполнением текстовых полей 'if (lines! = Null && lines.Length == 5)'. – Sinatr

+0

@Sinatr 'lines' не может быть нулевым. Будет либо запущен экземпляр массива, либо исключение. –

ответ

3

Проблема в загрузке файла.

string[] lines = System.IO.File.ReadAllLines(@"C:\Audio Silence Detector\AudioSilenceDetector.txt"); 

Вы не можете быть уверены, что lines теперь содержит 5 elemetns. Вероятно, вы должны это проверить.

if(lines.Length == 5) 
{ 
    tbOpenKey.Text = lines[0]; 
    tbSecretKey.Text = lines[1]; 
    tbStatusRequestPath.Text = lines[2]; 
    tbStatusRequestAPI.Text = lines[3]; 
    tbSeconds.Text = lines[4]; 
} 
else 
{ 
    MessageBox.Show("Input Data is Wrong"); 
} 
+0

Спасибо. Кажется, это исправило проблему, с которой я столкнулся. –

Смежные вопросы