Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > Проверка цвета и его выбор


Автор: nblxA 20.9.2009, 14:42
Добрый день. На форме присутствует палитра. Когда тыкаю на нее и выбираю цвет, а затем кликаю на форме, то пиксель, на котором тыкнул толжен закрасится в соответсвующий цвет. Кроме того в массив записывается объект с параметрами: координаты 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?


Автор: Heinzz 20.9.2009, 15:33
Код

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;
            }

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

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

Автор: th1nker 20.9.2009, 17:02
Код

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

Так будет понагляднее, хотя и менее производительнее...

Автор: nblxA 20.9.2009, 18:28
Огромное спаисбо. Действительно работает  smile  Вот только не очень удобно. Для начала надо узнать кодировку цвета ))) Но это не проблема. Цветов не так уж много. Еще раз большое спасибо! 

Автор: nblxA 20.9.2009, 21:01
ДобренькийПапаша, чтобы сделать экземпляр перечисления, мне нужно знать каким его сделать, т.е. если на палитре выбран черный, то я должен присвоить m_paintPlaceColor = eColorObject.BLACK.
А типов eColorObject у меня много, и чтобы знать какому соответствует цвет на палитре, мне нужно сделать оператор switch. Вот я им и пытаюсь воспользоватсья)))))

Автор: ДобренькийПапаша 20.9.2009, 21:26
А всё увидел, чего-то я тупанул)))
Извиняюсь)))

Автор: nblxA 20.9.2009, 21:58
Да все нормально! Спасибо за удиление внимания моей проблеме ))) Сделал как советовал Heinzz. Все работет. Огромное спасибо!

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