2012-04-22 1 views
0

У меня есть несколько строк в нескольких выберите поле, и каждый раз, когда пользователь выбирает значение, которое он будет обновляться соответственно следующим образом:C# - изменение значения несколько Выберите Список Box

 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 или более, значения будут перезаписаны последним выбранным.

Ценовая собственность - это просто получить и установить.

Благодаря

+0

... сделать цену массивом или «списком», который может обрабатывать несколько значений? Кроме того, вы можете использовать [оператор switch] (http://goo.gl/f0Yh2). – lordcheeto

+0

Измените свойство «Свойство SelectionMode» на «Один». Поскольку разрешение выбора более одного элемента не имеет смысла. –

ответ

1

Чтобы перебрать все выбранные элементы в списке, вы должны использовать SelectedIndices, который представляет собой набор индекса на основе нуля для выбранных элементов.

У меня есть if-else if ... с ценами на имена массивов, их гораздо проще писать и гораздо лучше расширять, если необходимо (если 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

Цена является свойством, как вы сказали, вероятно, типа междунар. Он может удерживать только одно значение за раз. Если вы хотите сохранить несколько значений, вам нужно использовать коллекцию. Вы можете объявить цену как список, и тогда вы сможете добавить каждую цену в свой оператор 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); 
} 

Я не уверен, что о вашей классовой структуре, но если специальный класс представляет один элемент, то его лучше иметь коллекцию «Special», а затем добавить цену для каждого из них