簡體   English   中英

用C#中的對象填充列表

[英]Filling a List with Objects in C#

我正在嘗試使用c#中的GUI創建一個簡單的程序,但是不幸的是我遇到了一些困難。 現在,我將嘗試解釋程序的基本結構。 我為三個不同的人群(大學教授,大學生和既不工作也不學習的人)開設3個課程。 我有一些從文件中讀取信息的方法(教授的頭銜,姓名,大學名稱,學生的教職編號等)。 我逐行讀取文件,並將信息保存在3個類之一的對象中。 之后,我將該對象放入列表中。 所以這是我的問題。 我想從列表中讀取每個對象並取其名稱,然后放在其他Windows窗體上動態創建的標簽上。 這是我的代碼的一小部分:

private void button1_Click(object sender, EventArgs e)
{
        ForeignPeople fPeople = new ForeignPeople();
        UniversityProfessors uProf = new UniversityProfessors();
        UniversityStudents uStudents = new UniversityStudents();
        if (radioButton1.Checked == true)
        {
            objList1 = loadList();
            Form2 f2 = new Form2();
            for (int i = 0; i < objList1.Count; i++)
            {
                if (objList1[i] is UniversityStudents)
                {
                    uStudents = (UniversityStudents)objList1[i];
                    tableLayoutPanel1.GrowStyle = TableLayoutPanelGrowStyle.AddRows;
                    Label et_tag = new Label();
                    et_tag.Name = "label" + i.ToString();
                    et_tag.Text = uStudents.getFirstName().ToString() + " " + uStudents.getLastName().ToString();
                    et_tag.AutoSize = true;
                    f2.tableLayoutPanel1.Controls.Add(et_tag, 0, i);
                    Label op = new Label();
                    op.AutoSize = true;
                    op.Text = "description";
                    f2.tableLayoutPanel1.Controls.Add(op, 1, i);
                }
                else if (objList1[i] is UniversityProfessors)
                {
                    uProf = (UniversityProfessors)objList1[i];
                    tableLayoutPanel1.GrowStyle = TableLayoutPanelGrowStyle.AddRows;
                    Label et_tag = new Label();
                    Label label = new Label();
                    et_tag.Name = "label" + i.ToString();
                    et_tag.Text = uProf.getFirstName().ToString() + " " + uProf.getLastName().ToString();
                    et_tag.AutoSize = true;
                    f2.tableLayoutPanel1.Controls.Add(et_tag, 0, i);
                    Label op = new Label();
                    op.AutoSize = true;
                    op.Text = "description";
                    f2.tableLayoutPanel1.Controls.Add(op, 1, i);
                }
                else if (objList1[i] is ForeignPeople)
                {
                    fPeople = (ForeignPeople)objList1[i];
                    String name, Name;
                    tableLayoutPanel1.GrowStyle = TableLayoutPanelGrowStyle.AddRows;
                    Label et_tag = new Label();
                    et_tag.Name = "label" + i.ToString();
                    et_tag.Text = fPeople.getFirstName().ToString() + " " + fPeople.getLastName().ToString();;
                    et_tag.AutoSize = true;
                    f2.tableLayoutPanel1.Controls.Add(et_tag, 0, i);
                    Label op = new Label();
                    op.AutoSize = true;
                    op.Text = "description";
                    f2.tableLayoutPanel1.Controls.Add(op, 1, i);
                }

            }
            f2.FormClosed += new FormClosedEventHandler(childFormClosed);
            f2.Show();
            this.Hide();
}

但是,如果我有兩個或更多行屬於一個對象(例如,文件中有兩個或更多學生,或者文件中有兩個或多個教授),則所有標簽的文本將帶有最后一個讀取對象的名稱。 我知道問題出在清單或演員表中,但我想不出另一種方法來做自己想要的事情。 如果有人可以提供幫助,我將非常感激。

除了phoog在注釋中提到的更改之外,我還將循環中每個對象的“ people”對象的實例移到該部分中。 這樣一來,您可以確保舊的被正確銷毀。 我還要添加一個檢查以確保強制轉換正常。

private void button1_Click(object sender, EventArgs e)
{
    if (radioButton1.Checked == true)
    {
        objList1 = loadList();
        Form2 f2 = new Form2();

        for (int i = 0; i < objList1.Count; i++)
        {
            if (objList1[i] is UniversityStudents)
            {
                UniversityStudents uStudents = (UniversityStudents)objList1[i];

                if (uStudents != null)
                {
                    // do stuff
                }
                else
                {
                    // do something sensible with the error here
                }
            }
            // if clauses for the other "people" objects
            // ...
        }
        f2.FormClosed += new FormClosedEventHandler(childFormClosed);
        f2.Show();
        this.Hide();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM