Oppure

Loading
28/05/11 12:48
Question
EDIT:
modifico il topic per dirvi che ho notato che se uso pbImage.CreateGraphics invece dell'immagine diretta funge più di una volta ma la prima no O.o
Se qualcuno può spiegarmi esattamente cosa succede mi fa un gran favore :-|


Ciao a tutti,
avrei un problema con la classe graphics in quanto, dopo la prima volta, smette di disegnare sopra l'immagine di una picturebox.
Deve dipingere sopra il controllo due frecce stilizzate quando il mouse entra nella sua area per poi toglierle quando ne esce, solo che dopo la prima cancellazione smette di farlo 8-|

Vi allego il codice (i simboli vengono disegnati a destra e a sinistra della picturebox, per quello c'è il controllo sul padding):
 Private Sub pbImage_MouseEnter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles pbImage.MouseEnter
        If pbImage.Image IsNot Nothing Then
            Try
                DrawChangeImageArrow(My.Resources.Actions_arrow_left_icon, New Rectangle(0, 225, 46, 46), New Rectangle(-5, 225, 46, 46)) 'left arrow
                DrawChangeImageArrow(My.Resources.Actions_arrow_right_icon, New Rectangle(588, 225, 46, 46), New Rectangle(593, 225, 46, 46)) 'right arrow
            Catch ex As Exception
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End Try
        End If
    End Sub

 Private Sub pbImage_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles pbImage.MouseLeave
        If pbImage.Padding.Left = 0 Then ChangeImage() Else pbImage.Refresh() 'remove the arrows
    End Sub

Private Sub DrawChangeImageArrow(ByVal ArrowImage As Image, ByVal EllipseRect As Rectangle, ByVal ImageRect As Rectangle)
        Dim Painter As Graphics
        If pbImage.Padding.Left = 0 Then Painter = Graphics.FromImage(pbImage.Image) Else Painter = pbImage.CreateGraphics 'remember .left = .right always
        Using Painter
            With Painter
                .SmoothingMode = Drawing2D.SmoothingMode.HighQuality
                .InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic
                .FillEllipse(Brushes.Black, EllipseRect)
                .DrawImage(ArrowImage, ImageRect)
            End With
        End Using
    End Sub

N.B. ChangeImage() è una procedura che cambia l'immagine a pbImage, non l'ho riportata perché è abbastanza lunga e in teoria non dovrebbe essere la causa del problema, se volete non ho comunque problemi a postarla
Ultima modifica effettuata da Question 28/05/11 18:02
aaa
28/05/11 20:18
Ale96
Secondo me quando togli il mouse se changeimage restituisce nothing l'immagine della picturebox sarà nulla, quindi appena ci rimetti sopra il mouse il computer verifica la condizione che risulterà falsa e non disegnerà nulla.
aaa