15/09/21 12:24
Michele79
Buongiorno a tutti, sto traducendo un programma che crea un disegno tecnico su una picture box da VB6 a VB.NET:
le stesse routine di disegno vengono applicate su due form differenti ma, mentre su un form il programma disegna correttamente, nell'altro form da errore "loggetto è correntemente utilizzato altrove).
Io dichiaro ne form:
Public PicDrawing As Graphics
...
PicDrawing = PicDrawingPB.CreateGraphics
PicDrawing.PageUnit = GraphicsUnit.Millimeter
...
poi passo come parametro alle varie routine che creano il disegno la variabile PicDrawing.
Non riesco a capire perché in un form funziona e nell'altro no.
Grazie per l'aiuto
P.S. Ho sempre programmato in VB6 e da 2 anni a questa parte sto traducendo i programmi in VB.NET da autodidatta.
15/09/21 18:35
Carlo
le picturebox sui due form hanno lo stesso nome ma le identifichi distintamente?
Dal codice non si capisce se PicDrawingPB.CreateGraphics è all'interno di routine distinte contenute nei forms...
Un progetto con due forms contenenti una picturebox ciascuna dove disegni una riga, e ci mostri che non ci riesci, si può debuggare.
Per esempio se crei un progetto con due forms che contengono una picturebox ciasuno di nome PicDrawingPB
Public Class Form1
Public PicDrawing As Bitmap
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' Disegnare su una bitmap in ram è molto più veloce che disegnare su una picturebox esposta
' creo una bitmap delle stesse dimensioni della picturebox
PicDrawing = New Bitmap(PicDrawingPB.ClientSize.Width, PicDrawingPB.ClientSize.Height)
' uso la bitmap come layer grafico
Dim g As Graphics = Graphics.FromImage(PicDrawing)
' imposto l'unità di misura
g.PageUnit = GraphicsUnit.Millimeter
' disegno una riga arancione sulla bitmap in ram
g.DrawLine(Pens.Orange, 5, 5, 20, 20)
' trasferisco la bitmap nel background della picturebox sul form1
Me.PicDrawingPB.BackgroundImage = PicDrawing
' rendo la picturebox sul form2, delle stesse dimensioni della bitmap
Form2.PicDrawingPB.Size = PicDrawing.Size
' trasferisco la bitmap nel background della picturebox sul form2
Form2.PicDrawingPB.BackgroundImage = PicDrawing
' Mostro il form2 che contiene la seconda picturebox
Form2.Show()
' libero la ram
g.Dispose()
End Sub
End Class
Ultima modifica effettuata da Carlo 15/09/21 20:21
in programmazione tutto è permesso
16/09/21 18:22
Carlo
MLinea(ByRef Destinazione As Graphics...
l'oggetto grafico Destinazione, passato ByRef, fa si che l'oggetto passato sia a tutti gli effetti lo stesso dell'oggetto ricevuto, non lo puoi richiamare più volte per eseguire operazioni su oggetti distinti.
Prova ByVal, ma dubito che sia sufficiente.
Quando richiami MLinea per operare su un nuovo oggetto grafico, prima dovresti distruggere quello vecchio, ma senza codice sottomano è tutto da verificare.
Ultima modifica effettuata da Carlo 16/09/21 18:24
in programmazione tutto è permesso
17/09/21 8:08
Thejuster
Se è solo questione di coordinate, ti basta inviare un semplice array al form2 o una struttura in una funzione per disegnare.
Esistono decine di modi per fare questo.
Creare un immagine, ed inviarla al form2.
Ricavare bytes dall'immagine ed inviarla sotto forma di stream al form2.
array, una struttura o lista, ecc. ecc.
Ultima modifica effettuata da Thejuster 17/09/21 8:11