Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 08.03.2010
Сообщений: 4

Как вызвать события мышки на панели

29.03.2012, 20:45. Показов 2506. Ответов 3
Метки нет (Все метки)

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

Проблема в следующем:

У меня есть на форме Panel и в ней картинка(PictureBox). Панель нужна, собственно, что бы в случае, если картинка не влезает появлялись скроллбары.

В принципе все отлично работает, но хочется сделать скролл картинки в разные стороны при нажатой средней кнопке мыши.

И тут все тоже хорошо и работает, но событие панели Mouse_Down(и другие) не вызываются, если мышка в зоне картинки. Вместо этого вызывается аналогичное событие картинки.

В принципе, можно просто из события картики вызывать событие панели, но тогда в свойствах события e.Location попадают координаты курсора мышки относительно левого верхнего угла картинки, а не панели.

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

На всякий случай вот код:

C#
1
2
3
4
5
6
7
8
9
10
11
        private void panScheme_MouseDown(object sender, MouseEventArgs e)
        {
            Panel p = (Panel)sender;
 
            if (e.Button == MouseButtons.Middle)
            {
                Cursor = Cursors.SizeAll;
                MouseMode = "SchemeDrag";
            }
            
        }
Добавлено через 5 часов
Решил проблему следующим образом - вызываю функцию обработчик события панели преобразовав координаты мышки к координатам панели, но какое-то это кривое решение. pb - картинка, panScheme - панель, на которой эта картинка находится.

Неужели нельзя сделать так, что бы при движении мышки вызывалось событие панели, а не элментов на этой панели? =/

C#
1
2
3
4
5
6
7
        private void pb_MouseMove(object sender, MouseEventArgs e)
        {
            PictureBox p = (PictureBox)sender;
            Panel pan = (Panel)p.Parent;
            MouseEventArgs e2 = new MouseEventArgs(e.Button, e.Clicks, e.Location.X + pan.AutoScrollPosition.X, e.Location.Y + pan.AutoScrollPosition.Y, e.Delta);
            panScheme_MouseMove(p.Parent, e2);
        }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.03.2012, 20:45
Ответы с готовыми решениями:

Как вызвать один обработчик события в другом обработчике события?
Здравствуйте. Подскажите пожалуйста, каким образом можно вызвать информацию из одного обработчика события в другой обработчик события? ...

Как вызвать события из функции
Привет, как вызвать события из функции? private void SelectType_SelectionChanged(object sender, SelectionChangedEventArgs e){ ...

Как правильно вызвать прорисовку панели из метода Form1_KeyDown
Здравствуйте! Только начал учить C# никак не могу разобраться с вызовом методов и процедур, а точнее с аргументами. Пытаюсь заставить...

3
 Аватар для Михаил Смирнов
1 / 1 / 0
Регистрация: 09.10.2011
Сообщений: 8
01.04.2012, 16:44
Я может быть не понимаю, но почему, например, в конструкторе формы не указать
C#
1
pb.MouseMove += new EventHandler(panScheme_MouseMove);
Ведь это будет означать, что если происходит событие pb_MouseMove, то для его обработки вызывается panScheme_MouseMove
0
251 / 163 / 14
Регистрация: 10.03.2012
Сообщений: 544
01.04.2012, 19:43
И туда передаются параметры из PictureBox, в том числе и координаты отностиельно верхней левой точки именно PictureBox.
0
0 / 0 / 0
Регистрация: 08.03.2010
Сообщений: 4
13.04.2012, 17:43  [ТС]
Михаил Смирнов

Проблема только в координатах. Если сделать так как вы говорите, будут переданы координаты мышки относительно верхнего левого угла картинки, а не относительно верхнего левого угла панели, на которой эта картинка.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.04.2012, 17:43
Помогаю со студенческими работами здесь

Как вызвать обработчик события OnKeyPress
Доброго времени суток, товарищи программисты, объясните пожалуйста как мне вызвать обработчик события OnKeyPress? Второй день мучаюсь никак...

Как вызвать обработчик события OnKeyDown?
В определенный момент времени нужно программно вызвать событие OnKeyDown. Как Это сделать?

Как вызвать всплывающее окно на панели задач рядом с часиками?
Здравствуйте! Как вызвать всплывающее окно на панели задач рядом с часиками? Типа: 'До начала активации Windows осталось 30 дней'

Как вызвать обработчик события из другого класса?
Допустим есть проект, состоящий из: Window1.xaml Window1.xaml.cs App.xaml App.xaml.cs В ресурсах App.xaml среди прочего...

Как вызвать обработчик события для двух кнопок?
Не могу понять как вызвать обработчик есть у Меня код private EventHandler<ActionEvent> EvHandObjSave; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru