Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > WPF и Silverlight > Некорректно отрабатывает switch


Автор: ДобренькийПапаша 5.10.2010, 21:34
Странное дело творится. 
Вот разметка xaml, создающая комбо-бокс.
Код

<ComboBox
                  x:Name="cbColor"
                  Height="30"
                  Margin="3,3,1,3"
                  BorderBrush="Black"
                  BorderThickness="1"
                  FontSize="13.333"
                  Padding="3" SelectionChanged="cbColor_SelectionChanged" SelectedIndex="-1">
                  <ComboBoxItem Content="Белый"/>
                  <ComboBoxItem Content="Красный"/>
                  <ComboBoxItem Content="Синий"/>
                  <ComboBoxItem Content="Золотой"/>
                  <ComboBoxItem Content="Зелёный"/>
                  <ComboBoxItem Content="Оранжевый"/>
               </ComboBox>

Код

 private void cbColor_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            switch (cbColor.Text)
            {
                case "Белый":
                    {
                        choosedColor = Colors.White;
                        this.choosedColorCost = 600;
                        break;
                    }
                case "Золотой":
                    {
                        choosedColor = Colors.Gold;
                        this.choosedColorCost = 900;
                        break;
                    }
                default:
                    {
                        choosedColor = Colors.Other;
                        this.choosedColorCost = 650;
                        break;
                    }
            }

            SetPrice();
        }       


Что не выбирай в этом комбо-боксе - всегда отрабатывает default в switch'е! В чём может быть дело?

Автор: Sartorius 5.10.2010, 21:39
Делай switch по selectedIndex.

Автор: WolfTheGrey 6.10.2010, 01:25
а зачем свитчь? у тебя 32 ядерный процессор от интел хеон??????????

Автор: CYBERDREAM 6.10.2010, 08:13
можешь так,если знаешь что точно не нулл и т.д.
Код

switch(((ComboBoxItem)cbColor.SelectedItem).Content.ToString()) 
{

}


Автор: ДобренькийПапаша 6.10.2010, 09:06
Цитата(Sartorius @  5.10.2010,  21:39 Найти цитируемый пост)
Делай switch по selectedIndex. 


А почему проблемы с моим вариантом? Каково рациональное объяснение? То, что свитч лучше делать по индексу я, кажется, понял)))


Цитата(WolfTheGrey @  6.10.2010,  01:25 Найти цитируемый пост)
а зачем свитчь? у тебя 32 ядерный процессор от интел хеон??????????


А это меня просто пугает. Множество раз читал, что свитч из всех условных конструкций работает быстрее всего. Почему вы считаете, что это не так и какова альтернатива?


CYBERDREAM, да, так работает, спасибо.

Автор: WolfTheGrey 6.10.2010, 13:20
свичь занимает процесорное время, а иф пердпроцесорные блоки (както так)
Да и будет у тебя в комбобоксе 250 цветов, ты их будешь все в ручную прописывать?

Автор: Sartorius 6.10.2010, 14:48
Цитата(ДобренькийПапаша @  6.10.2010,  10:06 Найти цитируемый пост)
почему проблемы с моим вариантом? Каково рациональное объяснение? 

Потому что Text комбобокса и текст в выбранном элементе - это разные вещи. А вообще, для твоего случая больше подошел бы биндинг к ObservableCollection. 

Цитата(WolfTheGrey @  6.10.2010,  14:20 Найти цитируемый пост)
свичь занимает процесорное время, а иф пердпроцесорные блоки (както так)

Чего только не узнаешь...

Автор: ДобренькийПапаша 6.10.2010, 15:12
Цитата(WolfTheGrey @  6.10.2010,  13:20 Найти цитируемый пост)
свичь занимает процесорное время, а иф пердпроцесорные блоки (както так)
Да и будет у тебя в комбобоксе 250 цветов, ты их будешь все в ручную прописывать? 


Я умываю руки.

Sartorius, гы, а что же возвращает текст комбобокса как ни текст внутри, то есть текст выбранного элемента. Ладно, проверю сам. Всем спасибо)))

Автор: gambit 6.10.2010, 15:38
Цитата(WolfTheGrey @  6.10.2010,  13:20 Найти цитируемый пост)
свичь занимает процесорное время, а иф пердпроцесорные блоки (както так)

возможно и так, но на современных компах, это не заметно вообще.
Да, на производстве стараются избегать свичей, но не делают из этого трагедии.

Цитата(WolfTheGrey @  6.10.2010,  13:20 Найти цитируемый пост)
Да и будет у тебя в комбобоксе 250 цветов, ты их будешь все в ручную прописывать? 

Хороший аргумент, но в данном случае(не особо вглядывался в суть) заменить один свич из 250 элементов, на 250 ифов, это ене есть кулл((

ДобренькийПапаша, у элементов combobox должно быть свойство value, занеси в него числовое значение цвета, и весь твой свич, какое бы кол-во элементов не было, сведется к:

choosedColor = Colors.FromRGB(cbColor.SelectedValue)

Добавлено через 2 минуты и 49 секунд
ДобренькийПапаша, кстати на мой взгляд, логичнее топик было создать в общих вопросах. В вопросах wpf должны быть вопросы по wpf, а не любой вопрос из проекта на wpf

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)