ListBox没有显示C#中的对象集合

时间:2017-06-26 11:15:34

标签: c# .net winforms listbox

EDITED!工作代码

我有以下课程:

class Medic
{
    private readonly int codM;
    private string numeM;
    private string specialitate;

    //i have a constructor and properties with get and set, correctly written
}

我在要填写的表单中添加了3个textBox,每个都与一个类属性相关。

在此之后我有一个按钮,如果所有3个文本框字段都正确完成,则会创建一个新的类对象。

此对象将添加到List中。这个对象列表我想在listBox中显示,并在我添加新对象时更新。

另外,我希望列表中已有2个对象,并且在运行程序时显示在listBox中,在我的代码中创建的程序,不使用textBoxes,以及新输入的对象。我几乎不知道在哪里编写代码来创建这两个对象,就像创建和填充对象列表或编写代码以将此列表绑定到ListBox中一样;

public partial class Form1 : Form
    {

        List<Medic> listaMedici = new List<Medic>();
        Medic m1 = new Medic(0, "ion", "endocrinologie");

        public Form1()
        {
            InitializeComponent();

            listaMedici.Add(m1);


        }
private void button1_AddObject_Click(object sender, EventArgs e)
{
    if (textBox1_cod.Text == "")
        errorProvider1.SetError(textBox1_cod, "Introduceti codul medicului!");
    else if (textBox2_nume.Text == "")
        errorProvider1.SetError(textBox2_nume, "Introduceti numele medicului");
    else if (Regex.IsMatch(textBox2_nume.Text, @"^[ a-zA-Z]+$") == false)
        errorProvider1.SetError(textBox2_nume, "Numele contine doar litere si spatii");
    else if (textBox3_specialitate.Text == "")
        errorProvider1.SetError(textBox3_specialitate, "Introduceti specialitatea medicului");
    else
    {
        try
        {
            Medic medic = new Medic(Convert.ToInt32(textBox1_cod.Text), textBox2_nume.Text, textBox3_specialitate.Text);

            foreach (Medic m in listaMedici)
            {
                if (textBox1_cod.Text == m.CodM.ToString())
                {
                    throw new Exception("Codul contractului incalca proprietatea de unicitate. Introduceti un cod unic");
                    textBox1_cod.Clear();
                }
            }
                listaMedici.Add(medic);
                listBox1_medici.DataSource = new ObservableCollection<Medic>(listaMedici);
                listBox1_medici.DisplayMember = nameof(Medic.NumeM);
                listBox1_medici.ValueMember = nameof(Medic.CodM);
                listBox1_medici.SelectedIndex = 0;


            MessageBox.Show("ADDED!");

        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
        finally
        {
            errorProvider1.Clear();
            textBox1_cod.Clear();
            textBox2_nume.Clear();
            textBox3_specialitate.Clear();
        }
    }

}

private void listBox1_medici_SelectedIndexChanged(object sender, EventArgs e)
{
}

1 个答案:

答案 0 :(得分:0)

显示成员应该是要显示的属性的名称,而不是字符串属性。反射用于查找显示成员名称的属性。例如,如果您的medic.NumeM值是&#34;您好&#34; WPF将查找名为&#34; Hello&#34;的属性,检索属性的值并将其显示在列表框中。

在您的情况下,代码应为:listBox1_medici.DisplayMember = "NumeM";