【发布时间】:2017-06-26 11:15:33
【问题描述】:
已编辑!工作代码
我有以下课程:
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 个文本框,每个文本框都与一个类属性相关。
在此之后我有一个按钮,如果所有 3 个文本框字段都正确完成,则会创建一个新的类对象。
这个对象将被添加到一个列表中。我希望将这个对象列表显示在一个列表框中,并在我添加新对象时进行更新。
另外,我希望列表中已有 2 个对象,并在我运行程序时显示在列表框中,这些对象是在我的意思是代码中创建的,而不是使用文本框,并且新输入的对象将出现在这些对象之后。我几乎不知道在哪里编写代码来创建这 2 个对象,就像在哪里可以创建和填充对象列表或编写代码以将此列表绑定到 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)
{
}
【问题讨论】:
-
显示成员应该是要显示的属性的名称,而不是字符串属性。在您的情况下,它应该是“NumeM”
-
也可以考虑使用ObjectListView。 objectlistview.sourceforge.net/cs/index.html
-
查看
CollectionViewSource并使用ItemsSource而不是DataSource。 -
listBox1_medici.DataSource = ...表示它是 WinForms 列表框,而不是 WPF。你到底在问什么?