Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/25: Рейтинг темы: голосов - 25, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 27.08.2014
Сообщений: 5

Перемещение большой картинки мышкой внутри PictureBox

27.08.2014, 16:15. Показов 5293. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Есть Панель на которой расположен PictureBox, в него загружается картинка большого размера (например 3000*1400). У панели включено свойсво AutoScroll. Полосы прокрутки работаю изображение двигается, но мне бы хотелось сделать сдвиг картинки при зажимании правой кнопки мыши. И тут я застрял. Понимаю, что нужно пользовать MouseUp, MouseDown, MouseMove, но дальше тупик. Помогите кто чем может )))). Заранее благодарен.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.08.2014, 16:15
Ответы с готовыми решениями:

Перемещение большой картинки как в просмотрщиках изображений
Есть картинка загруженная в PictureBox, занимающий всю форму. Картинка имеет размеры гораздо больше экрана монитора. Как её пермещать...

Передвижение картинки внутри PictureBox
Здравствуйте! Пытаюсь реализовать алгоритм работы с картой, так что бы при наведении на мышки на определенные объекты на карте, всплывало...

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

7
 Аватар для Hemicide
121 / 114 / 62
Регистрация: 27.07.2014
Сообщений: 225
27.08.2014, 16:47
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Mehanik85, всё что Вам нужно, есть тут

Кликните здесь для просмотра всего текста
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Public Class Form1
    Dim LocationCursor As Point
    Dim LocationCursorOffset As Point
    Dim LocationPaint As Point
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
 
    End Sub
 
    Private Sub PictureBox1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
        If e.Button = Windows.Forms.MouseButtons.Right Then
            Me.Cursor = Cursors.SizeAll
            LocationCursor = Cursor.Position
        End If
    End Sub
 
    Private Sub PictureBox1_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove
        Dim pc As PictureBox = CType(sender, PictureBox)
 
        If e.Button = Windows.Forms.MouseButtons.Right Then
            LocationCursorOffset = Cursor.Position - LocationCursor
            LocationPaint += LocationCursorOffset
            LocationCursor = Cursor.Position
            pc.Invalidate()
        End If
    End Sub
 
    Private Sub PictureBox1_MouseUp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseUp
        Me.Cursor = Cursors.Default
    End Sub
 
    Private Sub PictureBox1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
        Dim pc As PictureBox = CType(sender, PictureBox)
        e.Graphics.Clear(Color.Transparent)
        e.Graphics.DrawImageUnscaled(pc.Image, LocationPaint)
    End Sub
End Class
4
0 / 0 / 0
Регистрация: 27.08.2014
Сообщений: 5
28.08.2014, 09:20  [ТС]
Спасибо. Очень помогло.

Добавлено через 11 часов 56 минут
Еще вопросик. После строк
VB.NET
1
2
3
4
5
Private Sub PictureBox1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
        Dim pc As PictureBox = CType(sender, PictureBox)
        e.Graphics.Clear(Color.Transparent)
        e.Graphics.DrawImageUnscaled(pc.Image, LocationPaint)
    End Sub
перестал работать код масштабирования изображения скроллом мыши. Из- за последней строчки, т.к. она перерисовывает изображение с иходным размером. Может чего еще подскажите?
0
 Аватар для Hemicide
121 / 114 / 62
Регистрация: 27.07.2014
Сообщений: 225
28.08.2014, 10:58
Цитата Сообщение от Mehanik85 Посмотреть сообщение
Может чего еще подскажите?
Конечно подскажем. Код масштабирования в студию!
0
0 / 0 / 0
Регистрация: 27.08.2014
Сообщений: 5
28.08.2014, 13:09  [ТС]
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 Private Sub PictureBox_MouseWheel(ByVal sender As System.Object, ByVal e As MouseEventArgs) Handles PictureBox1.MouseWheel
 
 
        If e.Delta <> 0 Then
            If e.Delta <= 0 Then
                If PictureBox1.Width < 100 Then Exit Sub 
            Else
                If PictureBox1.Width > 10000 Then Exit Sub 
            End If
 
            PictureBox1.Width += CInt(PictureBox1.Width * e.Delta / 1000)
            PictureBox1.Height += CInt(PictureBox1.Height * e.Delta / 1000)
            Txt_Height_Image.Text = PictureBox1.Height
            Txt_Width_Image.Text = PictureBox1.Width
        End If
 
      
      
    End Sub
0
 Аватар для Hemicide
121 / 114 / 62
Регистрация: 27.07.2014
Сообщений: 225
28.08.2014, 15:44
Лучший ответ Сообщение было отмечено Mehanik85 как решение

Решение

Mehanik85,
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
Public Class Form1
    Dim LocationCursor As Point
    Dim LocationCursorOffset As Point
    Dim LocationPaint As Point
    Dim DefaultImage As Image
    Dim ScaleImage As Size
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        PictureBox1.SizeMode = PictureBoxSizeMode.AutoSize
        DefaultImage = PictureBox1.Image
    End Sub
 
    Private Sub PictureBox1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
        If e.Button = Windows.Forms.MouseButtons.Right Then
            Me.Cursor = Cursors.SizeAll
            LocationCursor = Cursor.Position
        End If
    End Sub
 
    Private Sub PictureBox1_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove
        Dim pc As PictureBox = CType(sender, PictureBox)
 
        'Если PictureBox меньше чем Panel, двигать картинку нельзя
        If pc.Width > Panel1.Width And pc.Height > Panel1.Height Then
            If e.Button = Windows.Forms.MouseButtons.Right Then
                LocationCursorOffset = Cursor.Position - LocationCursor
                LocationPaint += LocationCursorOffset
                LocationCursor = Cursor.Position
                pc.Invalidate()
            End If
        End If
 
    End Sub
 
    Private Sub PictureBox1_MouseUp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseUp
        Me.Cursor = Cursors.Default
    End Sub
 
    Private Sub PictureBox1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
        Dim pc As PictureBox = CType(sender, PictureBox)
        e.Graphics.Clear(Color.Transparent)
        e.Graphics.DrawImageUnscaled(pc.Image, LocationPaint)
    End Sub
 
    Public Function ImageZoom(ByVal image As Image, ByVal size As Size) As Image
        Dim bmap As Bitmap = New Bitmap(image, image.Size + size)
        Dim grap As Graphics = Graphics.FromImage(bmap)
        grap.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic
        Return bmap
    End Function
 
    Private Sub PictureBox_MouseWheel(ByVal sender As System.Object, ByVal e As MouseEventArgs) Handles PictureBox1.MouseWheel
        Dim pc As PictureBox = CType(sender, PictureBox)
        If e.Delta <> 0 Then
            ScaleImage += New Size(CInt(pc.Width * e.Delta / 1000), CInt(pc.Height * e.Delta / 1000))
            LocationPaint = New Point(0, 0)
            pc.Image = ImageZoom(DefaultImage, ScaleImage)
        End If
    End Sub
 
    Private Sub PictureBox1_MouseEnter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.MouseEnter
        sender.Select()
    End Sub
End Class
0
0 / 0 / 0
Регистрация: 27.08.2014
Сообщений: 5
28.08.2014, 16:10  [ТС]
Ну просто огромнейшее СПАСИБО. ))) Только в Sub`е mousemove в условии поставил ИЛИ вместо И.
0
5 / 5 / 2
Регистрация: 25.01.2015
Сообщений: 134
14.07.2018, 23:02
Здравствуйте! Помогите пожалуйста с небольшой проблемой:
VB.NET
1
e.Graphics.Clear(Color.Transparent)
Почему у меня не ставиться прозрачный фон? Он заполняет весь компонент черным цветом.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.07.2018, 23:02
Помогаю со студенческими работами здесь

Рисование на PictureBox мышкой
Товарищи программисты такая задача для умных.рисование на PictureBox с помощью мышки... То есть что требуется....есть пикчер бокс....во...

Перемещение компонента PictureBox мышкой
Всем привет! Собственно сама задача, это при зажатой левой кнопке мыши перемешать PictureBox внутри другого(родительского) PictureBox....

Перемещение мышкой PictureBox'а по форме
Подскажите как мне сделать,чтобы в процессе компиляции я мог при нажатии на Pickturebox перемещать ее по форме?

Перемещение курсором картинки в Picturebox
Собственно вопросик небольшой,но в программе бы меня порадовал бы.Не потскажете как,когда пикчер бокс меньше картинки ,саму картинку можно...

Перемещение курсором картинки из проводника в pictureBox
Доброго времени суток, уважаемые форумчане. Разработкой на C# занимаюсь относительно недавно, поэтому и прошу совета. Каким образом...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru