Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проверка цвета и его выбор, Применение оператора switch вместо if 
V
    Опции темы
nblxA
Дата 20.9.2009, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 3.8.2009

Репутация: нет
Всего: нет



Добрый день. На форме присутствует палитра. Когда тыкаю на нее и выбираю цвет, а затем кликаю на форме, то пиксель, на котором тыкнул толжен закрасится в соответсвующий цвет. Кроме того в массив записывается объект с параметрами: координаты x, y и цвет. Таким образом, через switch я хочу проверить цвет который выбран из палитры и записать его в массив. 
Грубо говоря если цвет выбран черный:
Код

Color m_paintPlaceColor = Color.Black;

switch (m_paintPlaceColor)
            {
                case Color.Black:
                    absPaintPlace[x, y].colorObject = eColorObject.BLACK;
                    break;
                case Color.White:
                    absPaintPlace[x, y].colorObject = eColorObject.WHITE;
                    break;                
                default:
                    throw new ArgumentOutOfRangeException();
            }       

где 
Код

public enum eColorObject { WHITE, BLACK }


Но оператор switch ругается, что значение должно быть целочисленным, а в case должно быть постоянное значение.
Пришлось сделать так:
Код

            if (m_paintPlaceColor == Color.Black) {
                absPaintPlace[x, y].colorObject = eColorObject.BLACK;
            }            
            if (m_paintPlaceColor == Color.White) {
                absPaintPlace[x, y].colorObject = eColorObject.WHITE;
            }

Но это не красиво и не удобно, т.к. у меня выбор идет не между 2мя цветами, а между 7ю. Возможно ли как-нибудь использовать оператор switch?


PM MAIL   Вверх
Heinzz
Дата 20.9.2009, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 12.12.2008
Где: .net

Репутация: 1
Всего: 9



Код

switch (myColor.GetHashCode())
            {
                case 2228258://black
                    this.BackColor = Color.Black;
                    break;
                case 10813605://white
                    this.BackColor = Color.White;
                    break;
                case 2359332://blue
                    this.BackColor = Color.Blue;
                    break;
                case 9175180://red
                    this.BackColor = Color.Red;
                    break;
                default:
                    break;
            }

должно работать  


--------------------
user posted image
PM MAIL   Вверх
ДобренькийПапаша
Дата 20.9.2009, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

Репутация: нет
Всего: 7



Вы по-моему чушь какую-то сделали, зачем Вы тогда вообще перечисление создавали если им не пользуетесь, сделайте экземпляр Вашего перечисления  его сасуньте в switch, тогда ругаться никто не будет...


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
th1nker
Дата 20.9.2009, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Покоряю вселенную...
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 25.8.2008
Где: Калуга

Репутация: нет
Всего: 2



Код

            switch (color.ToString())
            {
                case "Color [Black]" : 
                    break;
                case "Color [White]" :
                    break;
                default:
                    break;
            }

Так будет понагляднее, хотя и менее производительнее...
PM MAIL   Вверх
nblxA
Дата 20.9.2009, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 3.8.2009

Репутация: нет
Всего: нет



Огромное спаисбо. Действительно работает  smile  Вот только не очень удобно. Для начала надо узнать кодировку цвета ))) Но это не проблема. Цветов не так уж много. Еще раз большое спасибо! 
PM MAIL   Вверх
nblxA
Дата 20.9.2009, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 3.8.2009

Репутация: нет
Всего: нет



ДобренькийПапаша, чтобы сделать экземпляр перечисления, мне нужно знать каким его сделать, т.е. если на палитре выбран черный, то я должен присвоить m_paintPlaceColor = eColorObject.BLACK.
А типов eColorObject у меня много, и чтобы знать какому соответствует цвет на палитре, мне нужно сделать оператор switch. Вот я им и пытаюсь воспользоватсья)))))
PM MAIL   Вверх
ДобренькийПапаша
Дата 20.9.2009, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

Репутация: нет
Всего: 7



А всё увидел, чего-то я тупанул)))
Извиняюсь)))


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
nblxA
Дата 20.9.2009, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 3.8.2009

Репутация: нет
Всего: нет



Да все нормально! Спасибо за удиление внимания моей проблеме ))) Сделал как советовал Heinzz. Все работет. Огромное спасибо!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0444 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.