2012-10-27 79 views
0

我有一個列表框,其中有不同的蛋糕。我如何給每個蛋糕一個價格,並讓我的標籤顯示所選蛋糕的總成本?以下是我到目前爲止的代碼。如何將值分配給c#列表框中的項目?

for (int index = 0; index < lstCakes.SelectedItems.Count; index++) 
     { 
      strCakes += Environment.NewLine + lstCakes.SelectedItems[index].ToString(); 
     } 

double tax = 1.13; 
     lblOrdered.Text = "You have ordered: " + strCakes + '\n' + "Total Cost: " + (tax * cakeCost).ToString("C"); 

我試着用開關類似如下,但只顯示最後選定項目的成本。

switch (lstCakes.SelectedIndex) 
     { 
      case 0: 
       if (lstCakes.SelectedIndex == 0) 
       { 
        cakeCost = 18; 
       } 
       break; 
      case 1: 
       if (lstCakes.SelectedIndex == 1) 
       { 
        cakeCost = 25; 
       } 
       break; 
      case 2: 
       if (lstCakes.SelectedIndex == 2) 
       { 
        cakeCost = 40; 
       } 
       break; 
      case 3: 
       if (lstCakes.SelectedIndex == 3) 
       { 
        cakeCost = 30; 
       } 
       break; 
     } 

任何建議表示讚賞。

回答

1

假設這是一個桌面應用程序,您可能希望將您的價格放在配置文件中,以便以後可以更改它們。您將一個<appSettings>塊添加到您的App.config文件中,併爲每個蛋糕添加一個條目,然後使用ConfigurationManager.AppSettings[]命令檢索它們。

因此,如果這是一個Windows窗體應用程序,然後在表單加載,你可以進入你的應用程序設置,檢索所有你想要的蛋糕的細節,然後填寫你的列表框每個條目(見http://msdn.microsoft.com/en-us/library/z38x31c0.aspx )。這樣您可以動態地爲每個條目創建文本。如果你想讓每行包含價格,你將不得不將其硬編碼到行的文本中。 (我想這就是你要求的...)

最後一個注意事項。你不應該使用+來連接字符串。 C#中的字符串是不可變的 - 這意味着字符串本身不能被修改(如果你願意,我可以解釋的原因是其他所有的話題)。爲了將兩個字符串連接成「+」,C#需要創建第三個字符串並用前兩個字符串的內容填充它,這會消耗性能。要更有效地連接字符串,請使用StringBuilder對象和Append()方法,或使用String.Format(),它的工作方式相同。


不可變的字符串:

字符串在其核心是一個字符陣列。就像無法調整數組大小一樣,您無法調整字符串的大小。這是因爲數組存儲在堆棧中......堆棧是一塊內存,它充滿了運行程序的指令,這些指令都是「堆疊」在一起的。堆棧內存是預先分配的,出於所有意圖和目的,您不能動態更改堆棧上對象的內存佔用量。您可以有一個包含5個整數和5個空格的10個整數的數組,但不能採用int[5]並將其更改爲int[10]。如果你想添加5個以上的整數到int[5]你需要實例化一個新的int[10]並填補它。字符串也是一樣。

解決數組大小調整問題的方法是使用列表及其派生物來處理。他們使用堆內存功能。這與StringBuilder對象的功能類似。如果您想了解堆棧和堆內存以及它如何影響程序運行方式,可以幫助您更好地瞭解http://www.c-sharpcorner.com/UploadFile/rmcochran/csharp_memory01122006130034PM/csharp_memory.aspx。知道這一點非常重要,因爲它可以解釋許多將讓初學者程序員難以接受的謎團。對你提問有好處。

+0

感謝很多答案,並感謝提供你的想法。我應該更好地解釋一下這是Windows Forms應用程序。我想了解更多關於爲什麼C#中的字符串是不可變的。 – Kiviuq

+0

@levid再次感謝您的額外幫助。我非常感謝。我一定會看看你提供的鏈接。乾杯, – Kiviuq

0

蛋糕價格可能會在枚舉

enum CakePrices{ 
ChocCake = 20, 
VanillaCake = 50 
} 

保持計算成本:

int TotalCost; 
for (int index = 0; index < lstCakes.SelectedItems.Count; index++) 
{ 
    strCakes += Environment.NewLine + lstCakes.SelectedItems[index].ToString(); 

    //The name of the List Items should match the names on the enum,for this to work 
    TotalCost += (int)Enum.Parse(typeof(CakePrices), 
           lstCakes.SelectedItems[index].ToString() , 
           false) 
} 

Console.WriteLine("You have ordered:" + strCakes + '\n' + "Total Cost: " + TotalCost); 
相關問題