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

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

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

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

Ребят, помогите доделать задачку пожалуйста (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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.12.2014, 13:13
Ответы с готовыми решениями:

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

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

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

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

3
1679 / 1170 / 224
Регистрация: 23.12.2010
Сообщений: 1,506
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
8359 / 4568 / 1787
Регистрация: 11.02.2013
Сообщений: 9,674
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
1679 / 1170 / 224
Регистрация: 23.12.2010
Сообщений: 1,506
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.12.2014, 11:20

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

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

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

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

Получить координаты нажатий левой и правой кнопок мыши
вот надо получить координаты нажатий левой и правой кнопок мыши. меня вот что интересует после...

Подсчёт количества «кликов» левой, правой и средней кнопки мыши
Написать приложение, в котором ведётся подсчёт количества «кликов» левой, правой и средней кнопки...


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

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

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