Questo tuo problema è abbastanza frequente nel passaggio da VB6 a .NET.
In VB6 una Form aveva una particolare proprietà
AutoRedraw che permetteva di rendere persistente la grafica.
In .NET non mi risulta esista più tale proprietà ( che era molto comoda, anche se in particolari condizioni portava all'errore... ).
Una possibile soluzione consiste nell'inserire il codice che genera la grafica desiderata, direttamente nell'evento
Paint della Form.
Esempio VB .NET 2003 ( 10 righe rosse orizzontali ) :
Codice:
Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
Dim penna As New System.Drawing.Pen(System.Drawing.Color.Red)
penna.Width = 2
Dim G As System.Drawing.Graphics
G = Me.CreateGraphics()
Dim i As Integer = 0
For i = 1 To 10
G.DrawLine(penna, 0, i * 50, 500, i * 50)
Next
penna.Dispose()
G.Dispose()
End Sub
Da quanto ho capito, se queste linee vengono generate di continuo in base a dati particolari ( Timer, Porte ecc... ), dovrai modificare il tuo codice in modo da forzare l'evento Paint ogni volta che dovrai disegnare una nuova linea...
In pratica devi distinguere e separare i dati in ingresso dalla loro rappresentazione grafica.
Il metodo
.Refresh forza l'evento
Paint.