2013-04-22 43 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