用对象填充listbox,但让它显示所述对象的几个属性的连接



我有一个包含几个列表框的表单,由对象填充。其中一个列表框应该包含对象,但显示一个句子,该句子是该对象的几个属性的串联,中间有单词。

我已经使用override ToString方法以不同的方式在另一个列表框中显示相同的类。我尝试使用数据绑定,但它似乎不适合显示包含对象属性的句子。在上述类中,我确实有一个方法,用于从所需的属性中创建这个句子,但是我不能使用这个方法填充列表框,因为这样列表框就不包含对象。

我如何用对象填充这个列表框,但让它显示说的信息?

列表框的对象来自这个类:

public House(string name, string adress, int nrOfStudents)
{
this.name = name;
this.adress = adress;
this.nrOfStudents = nrOfStudents;
taskpackages = new List<string>();
students = new List<Student>();
}

这个方法给出了应该在列表框中显示哪些信息的想法:

public string GetHouseNameStudentsTasks()
{
List<string> studentNames = GetStudentNames();
return this.name + "tTaskpackages: " + string.Join(", ", taskpackages) + "tStudents: " + string.Join(", ", studentNames);
}

表单中应该完成动作的方法:

private void btnSaveHouse_Click(object sender, EventArgs e)
{
House selectedHouse = lbHouses.SelectedItem as House;
// several irrelevant functions
lbHousesAllInfo.Items.Add(selectedHouse);
// How to let lbHousesAllInfo contain House objects,
// but show the sentence described in the method above?
}

为类House添加属性,它将返回适合每个列表框的显示文本。例如,

class House
{
string name;
string address;
public House(string name, string address)
{
this.name = name;
this.address = address;
}
public string DisplayTextForListBox1
{
get
{
return $"{name}";
}
}
public string DisplayTextForListBox2
{
get
{
return $"{name} {address}";
}
}
}

你必须使用BindingSource组件(你可以在设计器中添加这个组件到你的表单),每个列表框控件一个,然后设置它们的DataSource属性。

// 
// bindingSource1
// 
this.bindingSource1.DataSource = typeof(House);
// 
// bindingSource2
// 
this.bindingSource2.DataSource = typeof(House);

listBox1做以下设置(你可以在visual studio设计器中做)

this.listBox1.DataSource = this.bindingSource1;
this.listBox1.DisplayMember = "DisplayTextForListBox1";

对于listBox2执行以下设置

this.listBox2.DataSource = this.bindingSource2;
this.listBox2.DisplayMember = "DisplayTextForListBox2";

为绑定源组件添加项

private void Button1_Click(object sender, EventArgs e)
{
bindingSource1.Add(new House("Name1", "Address 1"));
bindingSource2.Add(new House("Name2", "Address 2"));
}

相关内容

  • 没有找到相关文章

最新更新