Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Vb2010Express - Disegnare linee con 'pausa'
Forum - C# / VB.NET - Vb2010Express - Disegnare linee con 'pausa'

Avatar
Sal47 (Normal User)
Pro


Messaggi: 96
Iscritto: 05/02/2009

Segnala al moderatore
Postato alle 14:18
Venerdý, 21/12/2012
Salve,
sono agli inizi in VB2010 express e in un mio semplice programma ho un form con WindowState=Maximized e una PictureBox1 in cui con il codice:
Private Sub PICTUREBOX1_Paint(ByVal sender As Object, ByVal e As
For Me.y = 20 To 1200 Step 10
            e.Graphics.DrawLine(Pens.Red, 0, Me.y, 1050, Me.y)
            Pausa(500)
Next Me.y  
End Sub
la riempio di linee orizzontali.
Ho per˛ la necessitÓ di disegnare le linee una per volta con un intervallo di 1/2 secondo tra l'una e l'altra linea.
Ho inserito allora la sub:
Private Sub Pausa(ByVal DurataPausa As Integer)
        Dim OrarioFinePausa As Date = Date.Now.AddMilliseconds(DurataPausa)
        Do Until Date.Now > OrarioFinePausa
            Application.DoEvents()
        Loop
End Sub
e l'istruzione
Pausa(500)
Ma le linee vengono disegnate sempre tutte contemporaneamente e dopo un tempo che penso sia legato al Pausa(500).
Dove sbaglio? Potreste aiutarmi ?
Grazie e auguri di Buon Natale a tutto il Forum.

PM Quote
Avatar
Qwertj (Dev Team)
Guru


Messaggi: 678
Iscritto: 30/05/2011

Segnala al moderatore
Postato alle 15:48
Venerdý, 21/12/2012
Usa System.Threading.Thread.Sleep(n_millisecondi)

PM Quote
Avatar
Sal47 (Normal User)
Pro


Messaggi: 96
Iscritto: 05/02/2009

Segnala al moderatore
Postato alle 18:33
Venerdý, 21/12/2012
Salve,
ti ringrazio della risposta ma ti prego di darmi ancora un aiuto perchŔ ho provato:
- a inserire "System.Threading.Thread.Sleep(500)"  subito dopo Public Class Form1 e ottengo la
  segnalazione di errore sotto la parola System;
- a inserire l'istruzione subito dopo "e.Graphics.DrawLine(Pens.Red, 0, Me.y, 1050, Me.y)" del mio codice,
ma il risultato non cambia: le linee vengono disegnate sempre contemporaneamente e dopo un certo tempo.
Saluti

PM Quote
Avatar
Qwertj (Dev Team)
Guru


Messaggi: 678
Iscritto: 30/05/2011

Segnala al moderatore
Postato alle 20:42
Sabato, 22/12/2012
Ovviamente andava invece di Pausa(500)
Comunque ho sbagliato io perchŔ in ogni caso in quel contesto Ŕ inutile.
Quello su cui operi (e.Graphics) Ŕ un oggetto temporaneo che andrÓ a essere disegnato nella PictureBox alla fine della routine, quindi con tutte le modifiche giÓ fatte e senza intervallo
Dovresti usare l'oggetto restituito da PICTUREBOX1.CreateGraphics() invece di e.Graphics

PM Quote
Avatar
Sal47 (Normal User)
Pro


Messaggi: 96
Iscritto: 05/02/2009

Segnala al moderatore
Postato alle 6:08
Domenica, 23/12/2012
Ciao Qwertj, ancora grazie.
Devo per˛ assentarmi e potr˛ provare quanto mi suggerisci solo tra qualche giorno.
Ti faro sapere.
Buon Natale

PM Quote
Avatar
Sal47 (Normal User)
Pro


Messaggi: 96
Iscritto: 05/02/2009

Segnala al moderatore
Postato alle 14:25
Venerdý, 28/12/2012
Ciao Qwertj,
il tuo suggerimento di usare "PICTUREBOX1.CreateGraphics()" funziona perfettamente; le linee vengono disegnate una dopo l'altra in funzione del tempo di pausa fissato.
Grazie ancora.

PM Quote
Avatar
Qwertj (Dev Team)
Guru


Messaggi: 678
Iscritto: 30/05/2011

Segnala al moderatore
Postato alle 13:28
Domenica, 06/01/2013
Lieto di esserti stato utile :k:

PM Quote