2013-04-22 84 views
-1

我是編程的學生,並決定做一個簡單的程序來練習。 這是一個簡單的形式,與姓名,出生日期,地址等,它被保存在一個文本文件(我知道有更簡單的方法,但我想學習所有的人,並開始這個=))C#簡單表單索引超出了數組的範圍

我有一個按鈕,可以按名稱搜索該人是否已經保存,如果是,則應該用數據填寫表單。

下面是它是如何保存的一個例子:

38b7aa1f-0afb-4fe5-a8f6-40fe953eb1ca;Cindy;22/07/2005;111.111.111-11;22.222.222-2;33333-333;Testes;2112;05;Testando;Testadora;SP;[email protected];(44)44444-4444;(55)55555-5555;True;True;Rose;26/05/1950;666.666.666-66;77.777.777-7 

所以,名稱(辛迪)將被中和指數[1]的數組。

問題是這樣的錯誤:指數爲陣列 的邊界之外。在這條線:如果(linha [1] == txtboxNome.Text)我已搜索互聯網上和

有點兒理解該問題,但仍然不知道如何解決它。

有人可以幫我嗎? 如何正確加載我的表單?

這裏有一個打印幫助你「看」程序。別擔心安博佈局,幾件事情中運行時=)提前 http://i.imgur.com/jze16Pz.jpg

感謝=)

private void pesquisarNovoBtn_Click(object sender, RoutedEventArgs e) 
    { 

     var filePath = @"E:\Programação\WPF ConsultorioDentista\WPF ConsultorioDentista\bin\Debug\Pacientes.txt"; 
     string[] resultado = null; 

     using (var abrirPacientes = System.IO.File.OpenText(filePath)) 
     { 
      string lerPacientes = abrirPacientes.ReadLine(); 

      while (lerPacientes != null) 
      {      
       var linha = lerPacientes.Split(';'); 

       if (linha[1] == txtboxNome.Text) 
       { 
        resultado = linha; 
        break; 
       } 

       lerPacientes = abrirPacientes.ReadLine(); 
      } 

      if (resultado == null) 
      { 
       MessageBox.Show("Paciente não encontrado."); 
      } 
      else 
      { 
       txtboxNome.Text = resultado[1]; 
       txtboxData.Text = resultado[2]; 
       txtboxCPF.Text = resultado[3]; 
       txtboxRG.Text = resultado[4]; 
       txtboxCEP.Text = resultado[5]; 
       txtboxEndereco.Text = resultado[6]; 
       txtboxNumero.Text = resultado[7]; 
       txtboxCompl.Text = resultado[8]; 
       txtboxBairro.Text = resultado[9]; 
       txtboxCidade.Text = resultado[10]; 
       txtboxUF.Text = resultado[11]; 
       txtboxEmail.Text = resultado[12]; 
       txtboxCel.Text = resultado[13]; 
       txtboxTelRes.Text = resultado[14]; 
       //checkBoxClinico.IsChecked = resultado[15]; 
       //checkBoxOrto.IsChecked = resultado[16]; 

       txtboxNomeResp.Text = resultado[17]; 
       txtboxNascResp.Text = resultado[18]; 
       txtboxCPFResp.Text = resultado[19]; 
       txtboxRGResp.Text = resultado[20]; 
      } 
      abrirPacientes.Close(); 

     } 
+0

附加一個調試器,並在出現異常時檢查'lerPacientes'的值。 – 2013-04-22 15:04:12

+0

顯然'linha'沒有兩個元素(你試圖訪問第二個元素)。 'linha'的運行時間值是多少? – David 2013-04-22 15:04:29

+0

下次你可以試着用英文寫你的代碼嗎,非西班牙語的人很難讀懂西班牙語代碼。 – antonijn 2013-04-22 15:05:40

回答

1

得到透明度0這就是你必須「通過」的應用程序。在If語句上設置一個斷點(F9):

if (linha[1] == txtboxNome.Text) 
       { 
        resultado = linha; 
        break; 
       } 

然後鼠標滑過來查看包含在linha數組中的值。

很有可能你的文件的第一行有一個標題,它不會分裂。

+1

或者ReadLine方法返回一個空字符串,可能是空行。 – 2013-04-22 21:27:44