-1

私はプログラミングの学生で、簡単なプログラムを作成して練習することにしました。これは、名前、生年月日、住所などを含む単純なフォームで、テキスト ファイルに保存されています (もっと簡単な方法があることは知っていますが、すべてを学びたいので、この方法から始めました =) )

その人がすでに保存されている場合は、名前で検索するボタンがあり、そうであれば、フォームにデータを入力することになっています。

保存方法の例を次に示します。

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();

        }
4

1 に答える 1

1

ここで、アプリケーションを「ステップ スルー」する必要があります。If ステートメントにブレークポイント (F9) を設定します。

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

マウスオーバーして、linha 配列に含まれる値を確認します。

ほとんどの場合、ファイルの最初の行にヘッダーがあり、分割されていません。

于 2013-04-22T15:05:19.727 に答える