2016-04-29 38 views
0

私のテキストファイルがリストボックスに表示されない理由を調べることができません。このプログラムは、Vusial Studioを使用して作成されました。構文エラーはなく、私の論理は健全だと私は信じています。なぜあなたが私に助けてくれますか?ここでテキストファイルをリストボックスに読み込むC#

は私のForm1.csのためのコードです:

namespace Jason_T_READER_ 
{ 
    public partial class Form1 : Form 
    { 
     string selectedName = ""; 
     List<PersonEntry> nameList = new List<PersonEntry>(); 

     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      try 
      { 
       StreamReader inputfile; 
       inputfile = File.OpenText("Personlist.txt"); 

       string inRecord; 

       while (!inputfile.EndOfStream) 
       { 
        inRecord = inputfile.ReadLine(); 
        string[] tokens = inRecord.Split(','); 

        PersonEntry person = new PersonEntry(tokens[0],tokens[1],tokens[2]); 

        listBox1.Items.Add(person.Name); 

        PersonEntry friendObj = new PersonEntry(tokens[0],tokens[1],tokens[2]); 

        nameList.Add(friendObj); 
       } 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
       MessageBox.Show("Exception in try/catch. "); 
      } 
     } 

     private void listBox1_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      selectedName = listBox1.SelectedItem.ToString(); 
      PersonInfoForm myPerInfoForm = new PersonInfoForm(); 
      Label label1 = new Label(); 
      label1.Size = new Size(270, 75); 
      label1.Location = new Point(10, 10); 

      foreach (PersonEntry PersonEntry in nameList) 
      { 
       if (PersonEntry.Name == selectedName) 
       { 
        label1.Text += "Name: " + PersonEntry.Name + "\n" + 
            "Email: " + PersonEntry.Email + "\n" + 
            "Phone number: " + PersonEntry.PhoneNum; 
       } 
      } 

      myPerInfoForm.Controls.Add(label1); 
      myPerInfoForm.ShowDialog(); 

     } 

    } 
} 

は、これは私のクラスのシートである:ここで

namespace Jason_T_READER_ 
{ 
    class PersonEntry 
    { 
     private string _name; 
     private string _email; 
     private string _phoneNum; 

     public PersonEntry(string name, string email, string phoneNum) 
     { 
      _name = name; 
      _email = email; 
      _phoneNum = phoneNum; 
     } 
     public string Name 
     { 
      get 
      { 
       return _name; 
      } 
      set 
      { 
       _name = value; 
      } 
     } 
     public string Email 
     { 
      get 
      { 
       return _email; 
      } 
      set 
      { 
       _email = value; 
      } 
     } 
     public string PhoneNum 
     { 
      get 
      { 
       return _phoneNum; 
      } 
      set 
      { 
       _phoneNum = value; 
      } 
     } 
    } 
} 
+0

ですから、ステッピング-の上にコードF-10のキーを使用して、それをデバッグするのですか? –

+0

デバッガのコードをステップ実行すると、何が表示されますか? –

+0

どのようにデバッガをステップ実行しますか? F-10? –

答えて

1

はそれを動作させるためにいくつかのポイントです。

  1. バインド代わりに、名前だけ
  2. あなたができるプロパティの選択項目と、残りの部分からPersonEntry-オブジェクトを取得するようにdisplayMemberとValueMemberで
  3. を指定するためのリストボックスにPersonEntry、名前リストのリストそれから収集されます。コレクションを再度反復する必要はありません。
  4. 2つの同じ名前がある場合は、コードによって最後のものの詳細が表示されます。

リストボックスをバインドするコード。

List<PersonEntry> nameList = new List<PersonEntry>(); 
ListBox listBox1 = new ListBox(); 
foreach (string line in File.ReadAllLines("Personlist.txt")) 
{ 
    string[] tokens = line.Split(','); 
    nameList.Add(new PersonEntry(tokens[0], tokens[1], tokens[2])); 
} 
listBox1.DataSource = nameList; 
listBox1.DataTextField = "name"; 
listBox1.DataValueField = "name"; 

そして選択変更は次のようになります。

private void listBox1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    var boundList = (IList<PersonEntry>)listBox1.DataSource; 
    PersonEntry selected = boundList[listBox1.SelectedIndex]; 
    Label label1 = new Label(); 
    label1.Size = new Size(270, 75); 
    label1.Location = new Point(10, 10); 

    label1.Text += "Name: " + selected.Name + "\n" + 
          "Email: " + selected.Email + "\n" + 
          "Phone number: " + selected.PhoneNum; 

    myPerInfoForm.Controls.Add(label1); 
    myPerInfoForm.ShowDialog(); 

} 
+0

質問を下落させた人は、なぜ彼がここにいるのかを真剣に検討する必要があります。質問に何が間違っていますか?私はすべての耳を知っています。 –

+0

@MukeshAdhvaryu:この回答のコメントはどうですか? –

+0

私は同意しますが、あなたがそれに精通した人のオブジェクトにそれを含めると、実際にはあなたはそのことについてdownvotedになります。そしてあなたはコメントとしてそれを含めることをお勧めします。今、あなたはそれがコメントであることについて眉を上げ、それをどこに置くべきでしょうか?私たちは独裁的なフォーラムを運営していますか?どこに懸念を提起する? –

関連する問題