2012-04-22 124 views
0

我有一個多選擇框一些字符串,每次用戶選擇一個值,它會相應地更改像這樣:C# - 多選擇列表框更改值

 if (lstSpecial.SelectedIndex == 0) 
     { 
      special1.Price = 18; 

     } 
     else if (lstSpecial.SelectedIndex == 1) 
     { 

      special1.Price = 25; 

     } 
     else if (lstSpecial.SelectedIndex == 2) 
     { 
      special1.Price = 40; 

     } 
     else if (lstSpecial.SelectedIndex == 3) 
     { 
      special1.Price = 30; 

     } 

,併爲我工作正常,但是我怎樣才能做到這一點,以便如果用戶從列表框中選擇超過1個值,那麼Special1.Price將分別存儲每個值?我發現當我嘗試選擇2個或更多時,這些值會被最後一個選定的值覆蓋。

Price屬性只是一個簡單的get和set。

謝謝

+0

... make一個可以實際處理多個值的數組或列表?另外,您可能需要使用[switch語句](http://goo.gl/f0Yh2)。 – lordcheeto 2012-04-22 19:19:46

+0

將列表框的SelectionMode屬性更改爲「One」。因爲允許用戶選擇多個項目是沒有意義的。 – 2012-04-22 20:00:04

回答

1

要循環訪問列表框中的所有選定項目,您應該使用SelectedIndices,它是所選項目的從零開始的索引的集合。

如果...有數組名稱價格,寫起來容易多了,如果需要更好的擴展(如果lstSpecial包含4個以上的項目,您可能需要檢查以避免邊界失敗。 )。

const int[] prices = new int[]{18,25,40,30}; 
int total = 0; 
foreach(int index in lstSpecial.SelectedIndices) 
    total += prices[index]; 
special1.Price = total; 
0

價格是一個屬性,如你所說,可能是int類型。它一次只能保存一個值。如果你想保存多個值,你需要使用一個集合。您可以將價格聲明爲列表,然後您可以在if語句中添加每個價格。在下面的行上的東西。
聲明你的價格屬性,如:

public List<int> Price {get;set;} 

然後:(它在下列情況下更好地使用交換機)

if (lstSpecial.SelectedIndex == 0) 
     { 
      special1.Price.Add(18); 

     } 
     else if (lstSpecial.SelectedIndex == 1) 
     { 

      special1.Price.Add(25); 

     } 
     else if (lstSpecial.SelectedIndex == 2) 
     { 
      special1.Price.Add(40); 

     } 
     else if (lstSpecial.SelectedIndex == 3) 
     { 
      special1.Price.Add(30); 

     } 

這樣,您將擁有所有的選擇價格。您可以通過檢查他們:

foreach(int p in special1.Price) 
{ 
Console.WriteLine(p); 
} 

我不知道你的類結構,但如有特殊類代表一個單一的項目,那麼它最好有「特殊」的集合,然後添加的價格爲他們每個人