我一直在用这个问题撕掉我的头发,我的ToString在彼此之后直接重复,而不是掉到下一行。
如此图片所示,第二个事件名称应位于下面一行。
//ToString method in Event Class
public override string ToString()
{
return "\nEvent name : " + m_evName + "\n Date :" + m_evDate + "\n";
}
//print method in class
public String PrintEvents()
{
StringBuilder retev = new StringBuilder("");
foreach (Event e in m_events)
{
retev.Append(e.ToString() + "\n");
}
return retev.ToString();
}
//Foreach that displays the text
private void cboListEv_SelectedIndexChanged(object sender, EventArgs e)
{
String SelectedVenue = cboListEv.Text;
List<Venue> found = plan.selectVen(SelectedVenue);
lstEvents.Items.Clear();
foreach (Venue v in found)
{
lstEvents.Items.Add(v.PrintEvents());
}
}
答案 0 :(得分:3)
无法使用标准ListBox
为每个ListBox
项打印多个文本行。请尝试使用TextBox
代替Multiline = true
,并使用只读模式。它会达到类似的效果。
除此之外,您还需要使用支持多行数据的自定义项模板来绘制自己的自定义ListBox控件。
答案 1 :(得分:2)
ListBox
项不支持多行字符串。但是,您可以制作ListBox
的{{1}} DrawMode
,然后将以下内容与其OwnerDrawVariable
和MeasureItem
事件挂钩:
DrawItem
- 将会结束这样的事情:
答案 2 :(得分:1)
如果您为PrintEvents()
方法提供ListBox
的项目集合,则可以为每个找到的事件添加项目。像这样:
//print method in class
public String PrintEvents(ObjectCollection items)
{
foreach (Event e in m_events)
items.Add(e.ToString());
}
//Foreach that displays the text
private void cboListEv_SelectedIndexChanged(object sender, EventArgs e)
{
String SelectedVenue = cboListEv.Text;
List<Venue> found = plan.selectVen(SelectedVenue);
lstEvents.Items.Clear();
foreach (Venue v in found)
v.PrintEvents(lstEvents.Items);
}
答案 3 :(得分:1)
将Events
属性添加到Venue
类(如果尚未存在)
public List<Event> Events
{
get { return m_events; }
}
然后添加像这样的项目
foreach (Venue v in found) {
foreach (Event e in v.Events) {
lstEvents.Items.Add(e);
}
}