Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
halapanda
0 / 0 / 0
Регистрация: 13.12.2014
Сообщений: 11
1

При нажатии мышки, не отпуская, переносить картинки, которые находятся в PictureBox1 по PictureBox1

14.02.2015, 23:51. Просмотров 483. Ответов 9
Метки нет (Все метки)

Здравствуйте,есть проблема.
На форме присутствует pictureBox1,а в свою очередь в pictureBox1 размещено n-ое количество других pictureBox-ов.
Мне нужно при нажатии мышки,не отпуская,переносить картинки,которые находятся в pictureBox1 по pictureBox1.
Собственно в чем загвостка.Событие MouseMove происходит только тогда,когда я вожу мышку вне картинок в pictureBox1,а когда вожу по вложенному pictureerBox`у событие не генерируется.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.02.2015, 23:51
Ответы с готовыми решениями:

Ужастный шрифт в pictureBox1
Вставил в форму обычный pictureBox1, ну зарисовываю в нее текст самым обычным...

pictureBox1 чиститься сам по себе
у меня на pictureBox1 нарисован прямоугольник и мне надо начать его вращать....

Обработка PictureBox2 изменяет PictureBox1
Помогите пожалуйста, предполагалось, что в picturebox2 появится результат...

Вставить картинку использую ctrl+v в pictureBox1
Здравствуйте, подскажите как правильно реализовать вставку картинки на нажатие...

поворот на определенный угол pictureBox1.Image
можно ли как то изображение в pictureBox1.Image повернть на 46 градусов ?

9
blackstar
113 / 113 / 42
Регистрация: 27.02.2013
Сообщений: 899
14.02.2015, 23:53 2
halapanda, вставь в свойствах тех pictureboxов событие MouseMove pictureBox1
0
Sanya_sa
Модератор
697 / 684 / 298
Регистрация: 03.02.2015
Сообщений: 4,355
Записей в блоге: 8
Завершенные тесты: 3
15.02.2015, 00:37 3
halapanda, Не в обиду но исходя из Ваших слов могу предположить , что концептуально подход не верен. Опишите что нужно по подробнее может помогу.

Например я отрисовку фона (для picturebox) делаю в pictureBox.BacKgroungImage, а перемещения (я перемещаю картинки как и у Вас) отрисовываю в pictureBox.Image.
0
halapanda
0 / 0 / 0
Регистрация: 13.12.2014
Сообщений: 11
15.02.2015, 10:04  [ТС] 4
Если сделать так,то да,работать будет,но не так мне нужно.
Перещение картинки происходить по следующему алгоритму:
1)При нажатие кнопки мыши на во вложенном pictureBox`e генерируется событие MouseDown,в котором запоминаются координаты щелчка мыши.
2)При перемещение: я нахожу разность между координатами мыши в данный момент и координатыми из MouseDown и прибавляю эту разность к координатом pictureBox`a.
Вот все это я сделал в тестовом приложение,где только форма и оидн pictureBox,все работает.
Но в данном случае происходит такая ситуация,что при генерации MouseMove координаты получают значения обусловленные размерами вложенного pictureBox`a,а не внешнего.Объясню на примере.
Есть внешняя картинка 100х100,в ней вложеная картинка 20х20,например. И если тыкнуть на картинку,сгенерируется координаты мыши относительно вложеной картинки,то есть от 20 до 20,когда мне надо,чтоб генерировались относительно внешней,чтобы по ней перемешать.
Как то так.

Добавлено через 1 минуту
Sanya_sa, Ну вот сверху описал принцип,по которому осуществляется у меня перемещение.

Добавлено через 1 минуту
blackstar, Немного не,то что мне нужно.Сверху описал по подробней ситуацию.
0
Storm23
Эксперт .NETАвтор FAQ
6234 / 3739 / 1416
Регистрация: 11.01.2015
Сообщений: 4,906
Записей в блоге: 31
15.02.2015, 10:37 5
halapanda, http://www.cyberforum.ru/blogs/529033/blog3227.html
1
Sanya_sa
Модератор
697 / 684 / 298
Регистрация: 03.02.2015
Сообщений: 4,355
Записей в блоге: 8
Завершенные тесты: 3
15.02.2015, 12:18 6
Все понятно. Ну смотрите если вам принципиально именно пикчербоксы таскать то наверное ссылка от Storm23, то, что нужно (сам не проверял но он вроде форумчанин авторитетный). Просто я для перетаскивания так сказать картинок осуществляю в памяти (https://msdn.microsoft.com/en-us/library/ms142040(v=vs.110).aspx), а а отрисовку делаю каждые 60 миллисекунд. Получается работаю только с одним picturbox и проблем с координатами не возникает. Ну ели Вас всё равно не устроит мой подход могу порекомендовать следующие:

1) от вашего главного picturbox наследуем те которые будем таскать (используем parent потомучто так и с прозрачность если она нужна хлопот меньше)
2) теперь location наших picturbox (которые нужно таскать) вернет положение в главном picturbox останется рассчитать координаты и выполнить смещение.
3) да еще рекомендую использовать двойную буферизацию мерцания уходят.
1
halapanda
0 / 0 / 0
Регистрация: 13.12.2014
Сообщений: 11
15.02.2015, 14:44  [ТС] 7
Sanya_sa,Я наследовал и все равно,в событии MouseMove коориднаты(е.Х и е.Y) опеределяются координатоми вложенной картинки,а не главного pictureBox`a.

Добавлено через 2 минуты
Storm23, Спасибо большое за предоставленный код,но хочется сначало в своем разобраться.
0
Storm23
Эксперт .NETАвтор FAQ
6234 / 3739 / 1416
Регистрация: 11.01.2015
Сообщений: 4,906
Записей в блоге: 31
15.02.2015, 15:04 8
Цитата Сообщение от halapanda Посмотреть сообщение
мне надо,чтоб генерировались относительно внешней,чтобы по ней перемешать.
Используйте методы PointToScreen() и PointToClient() того контрола, который тяните.
1
Sanya_sa
Модератор
697 / 684 / 298
Регистрация: 03.02.2015
Сообщений: 4,355
Записей в блоге: 8
Завершенные тесты: 3
15.02.2015, 22:49 9
Sanya_sa,Я наследовал и все равно,в событии MouseMove коориднаты(е.Х и е.Y) опеределяются координатоми вложенной картинки,а не главного pictureBox`a.
Совершенно в дырочку! А теперь эти координаты прибавьте к pictureBox.Location x и y соответственно. Получите координаты точки клика относительно главного pictureBox.

Добавлено через 1 час 22 минуты
C#
1
2
3
4
5
6
7
8
9
10
11
12
private void draw(int x, int y)
        {
 
            Bitmap btm = new Bitmap(pictureBox_main.Width, pictureBox_main.Height);
            Graphics g = Graphics.FromImage(btm);          
            g.DrawImage(imageList_pic.Images[0], x, y);
            pictureBox_main.Image = btm;
            pictureBox_main.Refresh();
            btm.Dispose();
            g.Dispose();
 
        }
Вот накидал тут , но это только образец. Ничто не мешает Вам создать список изображения и отрисовывать и его.
1
halapanda
0 / 0 / 0
Регистрация: 13.12.2014
Сообщений: 11
17.02.2015, 18:37  [ТС] 10
Sanya_sa, Спасибо большое,что уделили мне свое время. Вот до меня только дошел принцип того,как рабоатет сбытие MouseMove и смог понять,что ошибка была не в самом алгоритме движения,а в функции определения,можно ли двигать данную картинку или нет.
0
17.02.2015, 18:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.02.2015, 18:37

Как в pictureBox1 загрузить картинку по указанному пути
В textBox1 я указываю путь к картинке (C:\Users\и тд..), как в pictureBox1...

Обращение к pictureBox1.Image до инициализации компонентов вызывает ошибку
Добрый, вечер! Хотел написать программку, чтобы я открывал файл и по нажатию...

На фоне picturebox1, прозрачность picturebox2 (свойство Transparent) не отображается
На фоне picturebox1, прозрачность picturebox2 (свойство Transparent) не...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru