在列表框中以水平方式显示List <t>中的多个属性

时间:2015-05-29 14:22:15

标签: c# winforms

我是C#(Apprentice,5个月,3周培训)的新手,其中一项任务是使用C#以购物篮的形式创建一个事件驱动的计算机程序。

我希望现在接近任务的结束,我正在设计ShoppingBasketForm。我有一个班级OrderItem,其中包含ProductNameQuantity等属性。我还有一个班级ShoppingBasket,其中包含List<OrderItem>OrderItems的属性。< / p>

如何让我的表单上的lstBoxBasket以购物篮方式水平显示List<OrderItem>OrderItems属性?

提前致谢。

例如,理想显示,忽略代码块,只是显示它的最简单方法:

Oranges    5     £1.20
Apples     3     £0.80

橙子为ProductName,5为Quantity,而1.20为LatestPrice

1 个答案:

答案 0 :(得分:1)

正如其他人所提到的,如果允许使用DataGridViewListView,这将是一项简单的任务。

但由于必须使用ListBox,您可以将DrawMode属性设置为OwnerDrawnFixed,并处理ListBox.DrawItem事件,像这样:

myListBox.DrawItem += new DrawItemEventHandler(this.DrawItemHandler);
myListBox.DrawMode = DrawMode.OwnerDrawnFixed;

private void DrawItemHandler(object sender, DrawItemEventArgs e)
{
    e.DrawBackground();
    e.DrawFocusRectangle();

    OrderItem item = myListBox.Items[e.Index] as OrderItem;
    if (item == null) return;

    Rectangle nameRect = new Rectangle(e.Bounds.Location, new Size(e.Bounds.Width / 3, e.Bounds.Height));
    e.Graphics.DrawString(item.ProductName, Font, Brushes.Black, nameRect);

    Rectangle quantityRect = new Rectangle(...);
    e.Graphics.DrawString(item.Quantity.ToString(), Font, Brushes.Black, quantityRect);
}

需要进行一些调整,你必须决定是否缩放或剪辑水平溢出,但你可以完全自由地渲染项目。