2017-11-29 2 views
1

Ich mache ein Kontaktbuch, um zu versuchen, Klassen zu lernen und neue Formulare zu öffnen.Füllen Sie Listbox von Textdatei

Ich versuche, Elemente aus einem Textdokument zu erhalten, um ein Listenfeld mit nur der Zeichenfolge vor dem ersten Trennzeichen aus jeder Zeile aufzufüllen. Wenn ich das Skript ausführe, wird das Windows-Formular angezeigt, aber die Listbox ist leer aber es scheint, dass fünf Elemente darin auswählbar sind. Ein Klick darauf hat keine Wirkung.

Hier ist mein Code für das Formular:

namespace AddressBook 
    { 
public partial class formMain : Form 
    { 
    //Pub vars 
    string selectedName = ""; 
    List<string> values = new List<string>(); 

    public formMain() 
    { 
     InitializeComponent(); 
    } 

    public void formMain_Load (object sender, EventArgs e) 
    { 
     //load values from file 
     try 
     { 
     StreamReader inputFile; 
     inputFile = File.OpenText("EmpRoster.txt"); 

     string lines; 

     while (!inputfile.EndOfSteam) 
     { 
      lines = inputFile.ReadLine(); 
      string[] tokens = lines.Split(','); 

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

      values.Add(person.Name + ";" + person.Email + ";" + person.Phone); 

      listOuput.Items.Add(person.Name); 
     } 
     } 

     catch (Exception ex) 
     { 
     MessageBox.Show(ex.Message); 
     } 
    } 


    //Selected index change 
    private void listOutput_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     selectedName = listOutput.SelectedItem.ToString(); 
     Form newForm = new Form(); 

     Label label1 = new Label(); 
     label1.Size = new Size(270, 75); 
     label1.Location = new Point(10, 10); 

     foreach (string str in values) 
     { 
     if (str.Containes(selectedName)) 
     { 
      string[] tokens = str.Split(';'); 
      label1.text += "Name: " + tokens[0] + "\n" + "Email: " + tokens[1] + "\n" + "Phone Number: " + tokens[2] + "\n"; 
     } 
     } 
     newForm.Controls.Add(label1); 
     newForm.ShowDialog(); 
    } 
} 

und hier mein Code für die Klasse ist:

namespace AddressBook 
{ 
    public class PersonEntry 
    { 
    private string _name; 
    private string _email; 
    private string _phone; 

    public PersonEntry(string name, string email, string phone) 
    { 
     _name = ""; 
     _email = ""; 
     _phone = ""; 
    } 

    public string Name 
    { 
     get { return _name; } 
     set { _name = value; } 
    } 

    public string Email 
    { 
     get { return _email; } 
     set { _email = value; } 
    { 

    public string Phone 
    { 
     get { return _phone; } 
     set { _phone = value; } 
    } 
    } 
} 

ich dies zur Lauf zeigen, bekommen kann nicht scheinen; Ich habe jedoch versucht, eine Schaltfläche hinzuzufügen und die Listbox beim Klicken zu füllen, und das schien zu funktionieren.

Ich würde einige frische Augen darauf schätzen.

Antwort

5

Das Problem liegt darin, wie Sie Ihre Klasse instanziieren. Wenn Sie an den Konstruktor aussehen:

public PersonEntry(string name, string email, string phone) 
{ 
    _name = ""; 
    _email = ""; 
    _phone = ""; 
} 

Sie sind nicht die empfangenen Werte speichern, sondern sie vollständig zu ignorieren. vereinfachen Sie einfach Ihre Klasse dazu:

public string Name { get; set; } 
public string Email { get; set; } 
public string Phone { get; set; } 

public PersonEntry(string name, string email, string phone) 
{ 
    Name = name; 
    Email = email; 
    Phone = phone; 
} 

Sie brauchen nicht die Unterstützung Felder zu erzeugen, das automatisch für Sie getan hat.

+0

Dies ist korrekt, als beantwortet markiert. Irgendeine Idee, warum das neue Formular für SelectedIndexChanged nicht auftaucht? Nevermind - Ich habe das Event nicht bekommen. Alles funktioniert wie es jetzt sollte. Danke dir! – Exulansis

+0

@Exulansis Sind Sie sicher, dass es nicht auftaucht? Ich würde annehmen, dass das SelectIndexChanged-Ereignis überhaupt nicht ausgelöst wird oder Sie es nicht sehen. –

+0

Bearbeitet diesen Kommentar - Ich habe das Ereignis nicht festgelegt. Es funktioniert jetzt. Danke für die schnelle Antwort! – Exulansis

2

Ihr PersonEntry-Konstruktor ist das Problem. Sie vergeben leere Strings, denen Sie (vermutlich) die angegebenen Parameter zuordnen sollten.

Verwandte Themen