Question (Normal User)
Rookie
Messaggi: 58
Iscritto: 14/12/2010
|
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
Vi allego il codice (i simboli vengono disegnati a destra e a sinistra della picturebox, per quello c'è il controllo sul padding):
Codice sorgente - presumibilmente VB.NET |
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 il 28/05/2011 alle 20:02 |
Ale96 (Member)
Pro
Messaggi: 132
Iscritto: 06/04/2010
|
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.
|