【问题标题】:Populate listbox from text file从文本文件填充列表框
【发布时间】:2017-11-29 14:52:32
【问题描述】:

我正在制作一本通讯录以尝试学习课程并打开新表格。

我正在尝试从文本文档中获取项目以填充列表框,仅使用每行第一个分隔符之前的字符串。当我运行脚本时,会出现 Windows 窗体,但列表框是 空白,但其中似乎有五个项目可供选择。点击它们没有任何效果。

这是我的表单代码:

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

这是我的课程代码:

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

我似乎无法在运行时显示它;但是,我确实尝试添加一个按钮并在单击时填充列表框,这似乎有效。

我希望能有新的眼光。

【问题讨论】:

    标签: c# listbox


    【解决方案1】:

    问题在于您如何实例化您的类。如果你看构造函数:

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

    您没有存储接收到的值,而是完全忽略它们。只需将您的课程简化为:

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

    您不需要生成支持字段,它会自动为您完成。

    【讨论】:

    • 这是正确的,标记为已回答。知道为什么 SelectedIndexChanged 没有弹出新表单吗?没关系——我没有得到事件。现在一切正常。谢谢!
    • @Exulasis 你确定它没有弹出吗?我猜它根本没有触发 SelectIndexChanged 事件,或者你没有看到它。
    • 编辑了该评论 - 我没有设置事件。现在可以了。感谢您的快速响应!
    • 很高兴能提供帮助。作为进一步的提示,请查看 override ToString() 以获取此 PersonEntry
    【解决方案2】:

    您的 PersonEntry 构造函数是问题所在。您正在分配空字符串,您应该(大概)分配提供的参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-01
      • 2016-10-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多