2016-04-29 1 views
0

Je n'arrive pas à trouver pourquoi mon fichier texte n'est pas affiché dans ma liste. Ce programme a été construit en utilisant Vusial Studio. Je n'ai pas d'erreurs de syntaxe, et je crois que ma logique est saine. Pouvez-vous m'aider à trouver pourquoi?Lire le fichier texte à la liste C#

Voici le code pour mes 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(); 

     } 

    } 
} 

Ceci est ma feuille de classe:

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

Ainsi avez-vous le débugger en renforçant-dessus de votre code à l'aide de la touche F-10? –

+0

Que vous dit le passage du code dans le débogueur? –

+0

Comment puis-je parcourir le débogueur? F-10? –

Répondre

1

Voici quelques points pour le faire fonctionner;

  1. Bind la liste des PersonEntry, nameList à la zone de liste à la place pour le nom seul
  2. Spécifiez le DisplayMember et ValueMember
  3. Alors que vous obtiendrez un PersonEntry-objet de l'élément sélectionné et reste de propriétés peuvent être recueillies à partir de cela. pas besoin de répéter la collection.
  4. s'il y a deux mêmes noms votre code vous donnera les détails de la dernière;

Code de liaison de la zone de liste;

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"; 

Et le changement de sélection sera:

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

Celui qui a rabaissé la question doit sérieusement se demander pourquoi il est là: aider ou arrêter les gens qui cherchent de l'aide? Quel est le problème avec la question? Je suis tout ouïe à savoir. –

+0

@MukeshAdhvaryu: et comment commenter cette réponse? –

+0

Je suis d'accord mais si vous l'incluez dans la réponse, les gens avertis s'y opposent, en fait vous êtes downvoted pour cela. Et il vous est conseillé de l'inclure comme commentaire. Maintenant vous avez soulevé un sourcil au sujet d'être un commentaire, alors où est-ce que ça va être mis? Sommes-nous en train d'organiser un forum autocratique ici? Où poser des questions? –