如何在列表框上打印下一行

时间:2012-04-12 20:32:58

标签: c#

我一直在用这个问题撕掉我的头发,我的ToString在彼此之后直接重复,而不是掉到下一行。

如此图片所示,第二个事件名称应位于下面一行。

the problem

//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());
        }
    }

4 个答案:

答案 0 :(得分:3)

无法使用标准ListBox为每个ListBox项打印多个文本行。请尝试使用TextBox代替Multiline = true,并使用只读模式。它会达到类似的效果。

除此之外,您还需要使用支持多行数据的自定义项模板来绘制自己的自定义ListBox控件。

答案 1 :(得分:2)

ListBox项不支持多行字符串。但是,您可以制作ListBox的{​​{1}} DrawMode,然后将以下内容与其OwnerDrawVariableMeasureItem事件挂钩:

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);
    }
}