ok ci sono quasi.. riesco finalmente a richiamare questa sub per disegnare del testo passandogli la picture precisa su cui disegnarlo:
codice:
Private Sub DrawText(ByVal pict As System.Object, ByVal Text As String) 'As Bitmap
Dim TextBitmap As New Bitmap(100, 100)
Dim Brush As New SolidBrush(Color.Black)
Dim SelectedFont = New Font("Arial", 20)
Using Graphic = Graphics.FromImage(TextBitmap)
Graphic.DrawString(Text, SelectedFont, Brush, 0, 0)
Dim Btn As PictureBox
Btn = DirectCast(pict, PictureBox)
Btn.CreateGraphics.DrawImage(TextBitmap, 0, 0)
End Using
End Sub
Ma c'è un problema.. questa sub la richiamo dall'evento mouseenter della picture interessata, il problema è che il testo viene disegnato ma solo per un attimo, poi sparisce subito... invece se prima della terz'ultima riga della sub postata sopra metto un msgbox con scritto qualunque cosa il testo appare e anche dopo che chiudo il msgbox rimane.. come mai?
questa è la sub da dove richiamo DrawText:
codice:
Private Sub MouseEnterPicture(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim Btn As PictureBox
Btn = DirectCast(sender, PictureBox)
Btn.BackgroundImage = My.Resources.button
Call DrawText(Btn, "AAAAA")
End Sub
ovviamente si tratta di picturedinamiche create in form_load e che collego a MouseEnterPicture con:
codice:
AddHandler Pic.MouseEnter, AddressOf MouseEnterPicture
EDIT: Ho notato anche che basta mettere un msgbox in MouseEnterPicture per far funzionare tutto correttamente..
codice:
Btn.BackgroundImage = My.Resources.button
msgbox "Prova"
Call DrawText(Btn, "AAAAA")
come mai questa stranezza O.o? Ho provato a mettere una pausa ma non funziona..
il codice per la pausa utilizzato è questo:
codice:
Public Sub Pausa(ByVal tempo As Double)
Dim Start, Finish, TotalTime As Double
Start = Microsoft.VisualBasic.DateAndTime.Timer
Finish = Start + tempo '5.0 ' Set end time for 5-second duration.
Do While Microsoft.VisualBasic.DateAndTime.Timer < Finish
' Do other processing while waiting for 5 seconds to elapse.
Loop
TotalTime = Microsoft.VisualBasic.DateAndTime.Timer - Start
End Sub
RISOLTO: bastava mettere un refresh!