Gli eventi, cioè le azioni che vengono scatenate dall’utente o generate da particolari condizioni, sono un punto chiave della programmazione con Visual Studio.
Alcuni importanti eventi sono quelli generabili con il mouse, si possono definire infatti le azioni che seguono al movimento del mouse, al click del tasto sinistro, del destro e della rotella.
In questo esempio creiamo un rettangolo che, tramite le funioni MouseUp, MouseDown, MouseMove e MouseWheel, subisce delle modifiche come lo spostamento e il ridimensionamento.
Public Class RettangoloAnimato
Public Event RettangoloModificato()
Public WithEvents PictureBox1 As PictureBox
Public b As Bitmap
Public R As Rectangle
Public g As Graphics
Public Penna As Pen
'Dragging
Public VerticeRettangolo_MouseDown As Point
Public Posizione_MouseDown As Point
Public DraggingInCorso As Boolean
'Resize
Public SizeRettangolo_MouseDown As Point
Public Posizione_MouseDown_R As Point
Public ResizingInCorso As Boolean
Sub New(b As Bitmap, PictureBox1 As PictureBox, R As Rectangle, g As Graphics, Penna As Pen)
Me.b = b
Me.PictureBox1 = PictureBox1
Me.R = R
Me.g = g
Me.Penna = Penna
End Sub
Private Sub PictureBox1_MouseDown(sender As Object, e As MouseEventArgs) Handles PictureBox1.MouseDown
If Not Me.R.Contains(e.Location) Then Exit Sub
If e.Button = Windows.Forms.MouseButtons.
Me.Posizione_MouseDown = e.Location
Me.VerticeRettangolo_MouseDown = R.Location
Me.DraggingInCorso = True
ElseIf e.Button = Windows.Forms.MouseButtons.
Me.Posizione_MouseDown_R = e.Location
Me.SizeRettangolo_MouseDown = R.Size
Me.ResizingInCorso = True
End If
End Sub
Private Sub PictureBox1_MouseEnter(sender As Object, e As EventArgs) Handles PictureBox1.MouseEnter
End Sub
Private Sub PictureBox1_MouseMove(sender As Object, e As MouseEventArgs) Handles PictureBox1.MouseMove
If Me.DraggingInCorso Then
Dim DeltaX As Integer = e.X - Me.Posizione_MouseDown.X
Dim DeltaY As Integer = e.Y - Me.Posizione_MouseDown.Y
R.Location = New Point(Me.VerticeRettangolo_
'correzione bordo laterale
If R.X < 0 Then R.X = 0
If R.X > b.Width - R.Width Then R.X = b.Width - R.Width
If R.Y < 0 Then R.Y = 0
If R.Y > b.Height - R.Height Then R.Y = b.Height - R.Height
End If
If Me.ResizingInCorso Then
Dim DeltaX As Integer = e.X - Me.Posizione_MouseDown_R.X
Dim DeltaY As Integer = e.Y - Me.Posizione_MouseDown_R.Y
R.Size = New Size(Math.Max(50, Me.SizeRettangolo_MouseDown.X + DeltaX), Math.Max(50, Me.SizeRettangolo_MouseDown.Y + DeltaY))
End If
RaiseEvent RettangoloModificato()
'Me.Ridisegno()
End Sub
Private Sub PictureBox1_MouseUp(sender As Object, e As MouseEventArgs) Handles PictureBox1.MouseUp
Me.DraggingInCorso = False
Me.ResizingInCorso = False
End Sub
Sub DisegnoCornice()
g.DrawRectangle(Penna, Me.R)
End Sub
Public SommaRotazioni
Public FattoreIngrandimento As Double = 1.1
Public FattoreRiduzione As Double = 0.9
Private Sub PictureBox1_MouseWheel(sender As Object, e As MouseEventArgs) Handles PictureBox1.MouseWheel
'Dim ROtazione As Integer = e.Delta
'Form1.RichTextBox1.
'SommaRotazioni += e.Delta / 120
'Form1.RichTextBox1.
'modifica rettangolo
'R.Size = New Size(Me.R.Width + SommaRotazioni, Me.R.Height + SommaRotazioni)
Dim FattoreScalingUsato As Double
If e.Delta > 0 Then
FattoreScalingUsato = FattoreIngrandimento
ElseIf e.Delta < 0 Then
FattoreScalingUsato = FattoreRiduzione
End If
Dim NUovaLArghezza As Double = (Me.R.Width * FattoreScalingUsato)
Dim NUovaAltezza As Double = (Me.R.Height * FattoreScalingUsato)
Dim SemiDifferenzaNUovaVecchiaLarg
Dim SemiDifferenzaNUovaVecchiaAlte
R.Location = New Point(Me.R.X - SemiDifferenzaNUovaVecchiaLarg
R.Size = New Size(Me.R.Width + 2 * SemiDifferenzaNUovaVecchiaLarg
RaiseEvent RettangoloModificato()
End Sub
End Class
Commenti
Posta un commento