【问题标题】:C# simple form index was outside the bounds of the arrayC# 简单表单索引超出了数组的范围
【发布时间】:2013-04-22 15:01:21
【问题描述】:

我是一名编程专业的学生,​​我决定制作一个简单的程序来练习。 这是一个简单的表格,有姓名、出生日期、地址等,它被保存在一个文本文件中(我知道有更简单的方法,但我想学习所有这些方法并从这个开始=))

我有一个按钮可以按姓名搜索此人是否已保存,如果是,则应该用数据填写表单。

这是一个如何保存的示例:

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;cindy@gmail.com;(44)44444-4444;(55)55555-5555;True;True;Rose;26/05/1950;666.666.666-66;77.777.777-7

因此,名称 (Cindy) 将在数组的索引 [1] 中。

问题是这个错误:索引超出了数组的范围 在这一行: if (linha[1] == txtboxNome.Text)

我在网上搜索了一下,有点明白问题所在,但仍然不知道如何解决。

有人可以帮帮我吗? 如何正确加载我的表单?

这是帮助您“查看”程序的打印件。不要担心布局,一些东西在运行时会得到不透明度 0 =) 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();

        }

【问题讨论】:

  • 附加一个调试器,当异常发生时检查lerPacientes的值。
  • 显然linha 中没有两个元素(您正在尝试访问第二个元素)。 linha 的运行时值是多少?
  • 下次你能不能试着用英文写你的代码,非西班牙语的人很难读懂西班牙的代码。

标签: c# arrays forms indexing


【解决方案1】:

这是您需要“逐步执行”应用程序的地方。在 If 语句上设置断点 (F9):

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

然后将鼠标悬停在 linha 数组中查看包含的值。

您文件的第一行很可能有一个标题,并且它没有拆分。

【讨论】:

  • 或者ReadLine方法返回一个空字符串,可能是一个空行。
猜你喜欢
  • 1970-01-01
  • 2015-11-06
  • 2010-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-06
  • 2023-04-08
  • 1970-01-01
相关资源
最近更新 更多