Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Windows Forms
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.09.2016, 09:59   #11
Maks3
Пользователь
 
Регистрация: 23.11.2014
Сообщений: 28
По умолчанию

уже лучше, но все равно немного не так. Если я кликну на картинке, то появится 3, после уведу мышь и отпущу, тогда появится 1, а мне надо, что-бы как только мышка выходит за границы picturebox'а сразу переключалось на 1
Вложения
Тип файла: rar myButton.rar (72.3 Кб, 11 просмотров)
Maks3 вне форума Ответить с цитированием
Старый 27.09.2016, 10:07   #12
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ну так обработайте MouseLeave
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 27.09.2016, 10:12   #13
Maks3
Пользователь
 
Регистрация: 23.11.2014
Сообщений: 28
По умолчанию

если глянете проект в прикрепленных файлах MouseLeave там есть, но он не срабатывает с зажатой кнопкой мыши
Maks3 вне форума Ответить с цитированием
Старый 27.09.2016, 10:44   #14
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
        enum ButtonState
        {
            CursorOutside,
            Hover,
            HoverAndDown
        }

        ButtonState state = ButtonState.CursorOutside;
        bool isDown = false;

        void SwitchState(ButtonState newState)
        {
            if (newState != state)
            {
                switch (newState)
                {
                    case (ButtonState.Hover):
                        pictureBox1.Image = Properties.Resources._2;
                        break;
                    case (ButtonState.HoverAndDown):
                        pictureBox1.Image = Properties.Resources._3;
                        break;
                    default:
                        pictureBox1.Image = Properties.Resources._1;
                        break;
                }
                state = newState;
            }
        }

        private void pictureBox1_MouseHover(object sender, EventArgs e)
        {
            SwitchState(ButtonState.Hover);
        }

        private void pictureBox1_MouseLeave(object sender, EventArgs e)
        {
            SwitchState(ButtonState.CursorOutside);
        }

        private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
            SwitchState(ButtonState.HoverAndDown);
            isDown = true;
        }

        private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
        {
            MessageBox.Show("it's work!");
        }

        private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
            var pnt = e.Location;
            pnt.Offset(pictureBox1.Location);
            if (pictureBox1.Bounds.Contains(pnt))
            {
                if(isDown)
                {
                    SwitchState(ButtonState.HoverAndDown);
                }
                else
                {
                    SwitchState(ButtonState.Hover);
                }
            }
            else
            {
                SwitchState(ButtonState.CursorOutside);
            }
        }

        private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
        {
            isDown = false;
        }
заодно немного оптимизировал
вообще как я говорил, лучше свой контрол тогда делать.
позволит логику один раз написать, потом плодить кнопок сколько угодно.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 27.09.2016, 10:57   #15
Maks3
Пользователь
 
Регистрация: 23.11.2014
Сообщений: 28
По умолчанию

Огромное спасибо, то что надо!!!
Maks3 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Собственная сортировка таблицы ACMILAN22 Помощь студентам 3 23.09.2012 11:37
Собственная графическая оболочка Studik Паскаль, Turbo Pascal, PascalABC.NET 4 05.07.2011 14:43
Кнопка из картинок qwerty55 Мультимедиа в Delphi 8 17.03.2010 00:01
Собственная операционная система kraftwerk Помощь студентам 0 15.04.2009 15:36
Собственная компонента: будильник redred Компоненты Delphi 1 13.05.2008 06:48