2015-05-29 70 views
-2

我對C#(學徒,5個月,3周的培訓)很合理,並且我的一項任務是使用C#創建一個事件驅動的計算機程序以購物籃的形式。在列表框中以水平方式顯示多個屬性<T>

我希望現在接近完成任務,我正在設計ShoppingBasketForm。我有一個類OrderItem,其中包含像ProductNameQuantity等屬性。我也有一個類ShoppingBasket,其中包含List<OrderItem>OrderItems屬性。

如何使我的表單上的lstBoxBasket以購物籃方式水平顯示List<OrderItem>OrderItems屬性?

在此先感謝。

例如理想顯示的,忽略碼塊,只是以顯示它的最簡單的方法:

Oranges 5  £1.20 
Apples  3  £0.80 

橙子爲ProductName,5爲Quantity和£1.20是LatestPrice

+2

*您嘗試過什麼?*如果您什麼都沒有嘗試過,您應該嘗試一下,然後返回出現的問題。請參閱:[問] –

+0

@EBrown我試着設置'DisplayMember'和'ValueMember',但顯然這不會以水平方式顯示它,我不知道如何去做多列列表框,所以我然後嘗試使用DataGrid,這讓我得到了我想要的格式;但規範要我使用列表框,所以我不得不恢復。 –

+0

我建議您發佈[最小,完整且可驗證的示例](http://stackoverflow.com/help/mcve),以便我們進一步爲您提供幫助。 –

回答

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

這需要一些調整,你將不得不決定是否縮放或剪切水平溢出,但是您可以完全自由地呈現項目的方式。

+0

該死的.....這是我寫的答案! –