1 / 1 / 1
Регистрация: 09.12.2013
Сообщений: 28
1

Нарисовать на форме с использованием левой клавиши мыши – прямоугольники, а с помощью правой – эллипсы

03.12.2014, 13:13. Показов 2677. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Реализуйте программу, рисующую на форме с использованием левой клавиши мыши – прямоугольники, а с помощью правой – эллипсы. Нажатием на кнопку мыши должна задаваться начальная позиция фигуры. При отпускании кнопки мыши фигура рисуется на форме в соответствии с начальными (нажали кнопку мыши) и конечными (отпустили кнопку мыши) координатами курсора мыши.

Ребят, помогите доделать задачку пожалуйста (VISUAL BASIC. NET 2008). Попытался сделать ее полностью, но ничего так и не получилось, только куча кода...рабочее получилось только это:
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Public Class Form1
 
    Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove
 
        Form1.ActiveForm.Text = e.X & " X " & e.Y
        Dim GR1 As Graphics '- для ЛКМ
        Dim GR2 As Graphics '- для ПКМ
        GR1 = Me.CreateGraphics '- для ЛКМ
        GR2 = Me.CreateGraphics '- для ПКМ
        If e.Button = MouseButtons.Left Then
            GR1.DrawRectangle(Pens.Red, e.X, e.Y, 10, 10) 'горизонтально, вертикально, ширина, высота
            If e.Button = MouseButtons.Right Then
                GR2.DrawEllipse(Pens.Red, e.X, e.Y, 10, 10) 'горизонтально, вертикально, ширина, высота
 
            End If
        End If
    End Sub
End Class
Рисует левой кнопкой мыши, а правой не рисует почему-то, а нажатием и отжатием вообще не рисует (нерабочий код не стал сюда писать)...
0
03.12.2014, 13:13
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.12.2014, 13:13
Ответы с готовыми решениями:

Включать курсор при нажатии левой клавиши, а выключать по нажатию правой клавиши мыши
Нужно: Включать курсор при нажатии левой клавиши, а выключать по нажатию правой клавиши мыши. Почему не работает? И что сделать, чтобы...

При нажатии левой клавиши "мыши" отразить курсор в левой половине экрана, а при нажатии правой - в правой
При нажатии левой клавиши "мыши" отразить курсор в левой половине экрана, а при нажатии правой - в правой, использовав в случае...

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

3
 Аватар для Юпатов Дмитрий
1717 / 1204 / 228
Регистрация: 23.12.2010
Сообщений: 1,541
03.12.2014, 13:47 2
Лучший ответ Сообщение было отмечено Gregory007 как решение

Решение

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
Public Class Form1
    Dim pstart As Point
    Dim pend As Point
    Dim g As Graphics
    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        g = Me.CreateGraphics
    End Sub
    
    Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
        ' средней кнопкой (нажатием на колесико) очищаем область рисования цветом из свойства BackColor формы
        If e.Button = Windows.Forms.MouseButtons.Middle Then
            g.Clear(Me.BackColor)
        ElseIf e.Button = Windows.Forms.MouseButtons.Left Or e.Button = Windows.Forms.MouseButtons.Right Then
            ' в событии нажатия кнопки ловим координаты курсора на форме для стартовой точки
            pstart = New Point(e.X, e.Y)
        End If
    End Sub
 
    Private Sub Form1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseUp
        pend = New Point(e.X, e.Y) ' координаты точки отпускания кнопки
        Select Case e.Button ' теперь в зависимости от того, какая кнопка была ранее нажата, рисуем нужную фигуру
            Case Is = Windows.Forms.MouseButtons.Left
                g.DrawRectangle(Pens.Red, Me.getrect(pstart, pend))
            Case Is = Windows.Forms.MouseButtons.Right
                g.DrawEllipse(Pens.Red, Me.getrect(pstart, pend))
        End Select
    End Sub
 
    ''' <summary>
    ''' Функция на основе 2х произвольных точек возвращает прямоугольник. Т.е. по данным этих точек определяется левый верхний угол прямоугольника и его размеры
    ''' </summary>
    ''' <param name="p1">первая точка</param>
    ''' <param name="p2">вторая точка</param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Private Function getrect(ByVal p1 As Point, ByVal p2 As Point) As Rectangle
        Dim s As New Size(Math.Abs(pstart.X - pend.X), Math.Abs(pstart.Y - pend.Y))
        Dim lup As Point = New Point(Math.Min(pstart.X, pend.X), Math.Min(pstart.Y, pend.Y))
        Return New Rectangle(lup, s)
    End Function
End Class
3
 Аватар для ViterAlex
8945 / 4857 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
04.12.2014, 07:17 3
Только зачем же создавать Graphics при загрузке формы и держать его в памяти? Предлагаю так дополнить событие отпускания кнопки мыши:
VB.NET
1
2
3
4
5
6
7
8
9
10
11
Private Sub Form1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseUp
    pend = New Point(e.X, e.Y) ' координаты точки отпускания кнопки
    Using g As Graphics = CreateGraphics()
        Select Case e.Button ' теперь в зависимости от того, какая кнопка была ранее нажата, рисуем нужную фигуру
            Case Is = Windows.Forms.MouseButtons.Left
                g.DrawRectangle(Pens.Red, Me.getrect(pstart, pend))
            Case Is = Windows.Forms.MouseButtons.Right
                g.DrawEllipse(Pens.Red, Me.getrect(pstart, pend))
        End Select
    End Using
End Sub
а 4 строчку и событие загрузки формы убрать
0
 Аватар для Юпатов Дмитрий
1717 / 1204 / 228
Регистрация: 23.12.2010
Сообщений: 1,541
04.12.2014, 11:20 4
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Цитата Сообщение от ViterAlex Посмотреть сообщение
Только зачем же создавать Graphics при загрузке формы и держать его в памяти
А что делать с экземпляром Graphics, используемым в событии Mouse_Down? Тогда уж и в этом событии так же поступить. Итого:
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
Public Class Form1
    Dim pstart As Point
    Dim pend As Point
 
    Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
        ' средней кнопкой (нажатием на колесико) очищаем область рисования цветом из свойства BackColor формы
        Using g As Graphics = CreateGraphics()
            If e.Button = Windows.Forms.MouseButtons.Middle Then
                g.Clear(Me.BackColor)
            ElseIf e.Button = Windows.Forms.MouseButtons.Left Or e.Button = Windows.Forms.MouseButtons.Right Then
                ' в событии нажатия кнопки ловим координаты курсора на форме для стартовой точки
                pstart = New Point(e.X, e.Y)
            End If
        End Using
    End Sub
 
    Private Sub Form1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseUp
        pend = New Point(e.X, e.Y) ' координаты точки отпускания кнопки
        Using g As Graphics = CreateGraphics()
            Select Case e.Button ' теперь в зависимости от того, какая кнопка была ранее нажата, рисуем нужную фигуру
                Case Is = Windows.Forms.MouseButtons.Left
                    g.DrawRectangle(Pens.Red, Me.getrect(pstart, pend))
                Case Is = Windows.Forms.MouseButtons.Right
                    g.DrawEllipse(Pens.Red, Me.getrect(pstart, pend))
            End Select
        End Using
    End Sub
 
    ''' <summary>
    ''' Функция на основе 2х произвольных точек возвращает прямоугольник. Т.е. по данным этих точек определяется левый верхний угол прямоугольника и его размеры
    ''' </summary>
    ''' <param name="p1">первая точка</param>
    ''' <param name="p2">вторая точка</param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Private Function getrect(ByVal p1 As Point, ByVal p2 As Point) As Rectangle
        Dim s As New Size(Math.Abs(pstart.X - pend.X), Math.Abs(pstart.Y - pend.Y))
        Dim lup As Point = New Point(Math.Min(pstart.X, pend.X), Math.Min(pstart.Y, pend.Y))
        Return New Rectangle(lup, s)
    End Function
End Class
0
04.12.2014, 11:20
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.12.2014, 11:20
Помогаю со студенческими работами здесь

Ограничить передвижение курсора мыши левой нижней четвертью экрана.При нажатие левой клавиши мыши выключить индикатор NumLock(+Звук),при нажатие право
Не могу решить подскожите кто знает.(Ограничить передвижение курсора мыши левой нижней четвертью экрана.При нажатие левой клавиши мыши...

Событие мыши: перемещение мыши при нажатой левой клавиши
Подскажите, пожалуйста как реализовать следующее: При перемещении мыши при нажатой левой клавише (выделение текста) выводится сообщение...

Имитация нажатия левой и правой кнопки мыши
Тут на форуме просто свалка из таких тем, и везде мегаметоды для этого писать надо, Подскажите команду пожалуйста как иммитировать нажатие...

Работа с PopupMenu левой и правой кнопками мыши
В моем проекте требуется задать возможность менять пользователем названия осей координат (показаны зеленым цветом) с помощью всплывающего...

Тренажёр мыши, нажатие левой и правой кнопки поочерёдно
Вообщем проблема такая, мне нужно сделать тренажёр мыши. Я всё сделал вроде, но есть одна проблемка. Изначально на форме видно Image1 и...


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

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

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Опции темы

Новые блоги и статьи
Система безопасности в Laravel: возможности и примеры
Wired 18.02.2025
Каждый день появляются новые виды атак и уязвимостей, которые могут поставить под угрозу конфиденциальные данные пользователей и функционирование всей системы. В этом контексте выбор надежного. . .
Давайте сравним Django и Laravel
Wired 18.02.2025
Django и Laravel - два мощных инструмента, которые часто сравнивают между собой. Оба фреймворка предлагают разработчикам богатый набор возможностей для создания масштабируемых веб-приложений, но. . .
Laravel или React - что лучше?
Wired 18.02.2025
В разработке веб выбор правильного инструмента часто определяет успех всего проекта. Особенно интересным представляется сравнение Laravel и React - двух популярных технологий, которые часто. . .
Laravel 11: новые возможности, гайд по обновлению
Wired 18.02.2025
Laravel 11 - это новая масштабная версия одного из самых популярных PHP-фреймворков, выпущенная в марте 2024 года. Эта версия продолжает традицию внедрения передовых технологий и методологий. . .
Миграции в Laravel
Wired 18.02.2025
Разработка веб-приложений на Laravel неразрывно связана с управлением структурой базы данных. При работе над проектом часто возникает необходимость вносить изменения в схему базы данных - добавлять. . .
Аутентификация в Laravel
Wired 18.02.2025
В современном мире веб-разработки безопасность пользовательских данных становится критически важным аспектом любого приложения. Laravel, как один из самых популярных PHP-фреймворков, предоставляет. . .
Laravel или Symfony: что лучше для старта?
Wired 18.02.2025
В веб-разработке выбор правильного фреймворка может стать определяющим фактором успеха проекта. Особенно это актуально для PHP - одного из самых распространенных языков программирования, где Laravel. . .
Что нового в Laravel 12
Wired 18.02.2025
С момента своего появления в 2011 году Laravel постоянно развивается, внедряя инновационные решения и совершенствуя существующие возможности. В начале 2025 года ожидается выход Laravel 12 - новой. . .
Роутер в Laravel: как работать с маршрутами
Wired 18.02.2025
Маршрутизация - один из основополагающих элементов любого веб-приложения на Laravel, определяющий как приложение отвечает на HTTP-запросы к различным URL-адресам. По сути, роутинг - это механизм. . .
Интеграция шаблона Bootstrap в Laravel PHP
Wired 18.02.2025
Разработка веб-приложений в современном мире требует не только надежного бэкенда, но и привлекательного, отзывчивого интерфейса. Laravel, как один из самых популярных PHP-фреймворков, отлично. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru