Condividi tramite


Procedura dettagliata: aggiornamento di un'applicazione Visual Basic 6.0 alla versione corrente di Visual Basic

Aggiornamento: novembre 2007

In questa procedura dettagliata verrà illustrato come aggiornare a Visual Basic 2008 un'applicazione di grafica di esempio di Visual Basic. Oltre a illustrare la procedura di aggiornamento, vengono evidenziate le differenze esistenti tra Visual Basic 6.0 e Visual Basic 2008 per quanto concerne la struttura della grafica. Questa procedura rappresenta anche un'introduzione alla gestione dei problemi di architettura nelle applicazioni.

L'applicazione di esempio illustrata in questa sezione è costituita da un form semplice contenente due pulsanti, una casella di immagine, un timer e un controllo immagine nascosto. Sebbene non disponga delle caratteristiche tipiche della maggior parte delle applicazioni che verranno aggiornate, essa presenta diversi problemi complessi che possono verificarsi durante l'aggiornamento delle applicazioni.

Nota:

Questa procedura dettagliata richiede l'installazione di Visual Basic 6.0 nel computer di sviluppo.

Per creare l'applicazione Visual Basic 6.0

  1. Aprire Visual Basic 6.0. Scegliere Nuovo progetto dal menu File.

  2. Nella finestra di dialogo Nuovo progetto selezionare Standard EXE, quindi scegliere OK.

  3. Aggiungere un controllo PictureBox al form e modificarne le dimensioni in modo che il controllo arrivi a occupare gran parte dell'area del form, lasciando libero uno spazio nella parte inferiore.

  4. Impostare la proprietà AutoRedraw su True, la proprietà DrawStyle su 0-Solid e la proprietà FillStyle su 0-Solid.

  5. Aggiungere due controlli CommandButton sotto il controllo PictureBox.

  6. Selezionare il primo controllo CommandButton, quindi impostare la proprietà Name su ClearPictureBox e la proprietà Caption su Clear.

  7. Selezionare il secondo controllo CommandButton, quindi impostare la proprietà Name su ShowImage e la proprietà Caption su Show Image.

  8. Aggiungere al form un controllo Image, quindi impostare la proprietà Name su sourceImage e la proprietà Visible su False.

  9. Impostare la proprietà Picture del controllo Image su un'immagine bitmap qualsiasi. È possibile utilizzare una delle immagini della cartella Immagini.

  10. Aggiungere al form un controllo Timer. Impostare la proprietà Enabled su False e la proprietà Interval su 25.

  11. Fare doppio clic sul form per aprire l'editor di codice.

    Option Explicit
    Private LeftPos As Double
    
    Private Sub ClearPictureBox_Click()
        Picture1.Cls
    End Sub
    
    Private Sub ShowImage_Click()
        LeftPos = 1
        Me.Timer1.Enabled = True
    End Sub
    
    Private Sub Timer1_Timer()
    
        If LeftPos <= 0 Then
            Me.Timer1.Enabled = False
            Picture1.Print "Visual Basic ROCKS!"
        Else
            LeftPos = LeftPos - 0.01
            Picture1.Cls
            Picture1.PaintPicture sourceImage, LeftPos * _
    Picture1.Width, 0
        End If
    End Sub
    
  12. ‎Premere F5 per eseguire l'applicazione. Fare clic sui pulsanti per osservare il comportamento, quindi eseguire il codice un'istruzione alla volta per verificarne il comportamento.

  13. Scegliere Salva progetto con nome dal menu File.

  14. Nella finestra di dialogo Salva file con nome salvare il form come PicForm.frm e il progetto come Drawing.vbp.

Per eseguire l'Aggiornamento guidato

  1. Aprire Visual Basic 2008. Scegliere Apri progetto dal menu File.

  2. Nella finestra di dialogo Apri progetto individuare e aprire il file Drawing.vbp.

    Verrà avviato l'Aggiornamento guidato Visual Basic. La prima pagina contiene una spiegazione delle operazioni che vengono eseguite durante la procedura guidata.

  3. Scegliere Next per passare alla seconda pagina. In questa pagina vengono visualizzate le opzioni per l'aggiornamento. In questo caso, non sono disponibili opzioni applicabili.

  4. Scegliere Next per passare alla terza pagina. Scegliere Next per accettare il percorso predefinito del nuovo progetto oppure specificare un percorso diverso. Il percorso predefinito è costituito da una nuova cartella immediatamente sotto la cartella del progetto di Visual Basic 6.0.

    Se viene richiesto di creare una nuova cartella, scegliere Sì.

  5. Nella quarta pagina dell'Aggiornamento guidato Visual Basic scegliere Next per iniziare l'aggiornamento.

    Una volta completato l'aggiornamento, la procedura guidata viene chiusa e il nuovo progetto verrà visualizzato in Esplora soluzioni.

Per visualizzare i risultati dell'aggiornamento

  1. In Esplora soluzioni fare doppio clic su _UpgradeReport.htm per aprire il report di aggiornamento.

    Nel report non viene visualizzato alcun problema generale da risolvere. Per PicForm.vb vengono visualizzati sei errori e nessun avviso.

    Nota:

    Gli eventuali avvisi verranno visualizzati anche nella finestra Elenco attività come elementi UPGRADE_WARNING. Gli avvisi sono relativi al codice che può causare lievi differenze nel comportamento dell'applicazione in fase di esecuzione. Facendo doppio clic su un elemento UPGRADE_WARNING nella finestra Elenco attività, è possibile passare direttamente al codice da modificare.

  2. Espandere la sezione PicForm.vb facendo clic sul segno più nella colonna Nuovo nome di file, in cui è visualizzato un elenco dettagliato dei problemi di aggiornamento relativi al form.

    Questi problemi si riferiscono a tre percorsi diversi: la routine ClearPictureBox_Click, la routine Timer1_Timer e il layout del form. È possibile fare clic sul collegamento Descrizione per visualizzare un argomento della Guida in cui viene descritto ciascun problema. In questo caso i problemi di layout non richiedono alcuna operazione. Consultando la Guida si constaterà che sono relativi a due proprietà del controllo PictureBox di Visual Basic 6.0 che non corrispondono alle proprietà equivalenti di Visual Basic 2008.

Per correggere l'errore ClearPictureBox_Click

  1. In Esplora soluzioni selezionare PicForm.vb. Scegliere Codice dal menu Visualizza.

  2. Nell'editor di codice selezionare la routine ClearPictureBox_Click.

    Suggerimento:

    Alla routine è stato aggiunto un commento UPGRADE_ISSUE. Se si scorre fino alla fine del commento, è possibile fare clic sul collegamento che consente di visualizzare l'argomento della Guida associato. Tutti i problemi, ad eccezione di quelli relativi al layout, vengono aggiunti come commenti di codice durante l'aggiornamento, inclusi i commenti UPGRADE_NOTE che illustrano cosa è accaduto durante l'aggiornamento e che non vengono visualizzati nel report di aggiornamento.

  3. Aggiungere alla routine ClearPictureBox_Click il codice seguente:

    Dim g As Graphics = Picture1.CreateGraphics()
    g.Clear(Picture1.BackColor)
    g.Dispose()
    

    L'unico errore nella routine originale è la chiamata di metodo Picture1.Cls(). A differenza di quanto avviene in Visual Basic 6.0, in Visual Basic 2008 i controlli intrinseci non forniscono accesso diretto alle relative aree di disegno con metodi. Tutte le operazioni di grafica vengono gestite con un oggetto speciale di tipo Graphics. È possibile accedere all'area di disegno di un controllo chiamando il metodo CreateGraphics() per ottenere un'istanza di un oggetto Graphics.

  4. Eliminare o impostare come commento la riga originale Picture1.Cls().

Per correggere gli errori Timer1_Timer

  1. Nell'editor di codice selezionare la routine Timer1_Tick.

    Nota:

    L'evento Timer dal controllo Timer di Visual Basic 6.0 viene aggiornato all'evento Tick del componente Timer di Visual Basic 2008. Nel report di aggiornamento viene illustrato il nome precedente dell'evento. Tuttavia l'editor di codice utilizza il nuovo nome.

  2. Aggiungere il seguente codice all'inizio della funzione:

    Dim g As Graphics = Picture1.CreateGraphics()
    

    Come per la routine precedente, gli errori iniziano con la mancanza di un oggetto Graphics.

  3. Individuare il primo UPGRADE_ISSUE, il metodo Picture1.Print. Aggiungere il codice seguente:

    g.DrawString("VB .NET ROCKS!", Me.Font, New SolidBrush( _
      Color.Yellow), 0, 0)
    

    Il metodo DrawString dell'oggetto Graphics sostituisce il metodo Print di Visual Basic 6.0. Se il metodo Print accetta un solo argomento Text, DrawString accetterà anche argomenti che specificano Font, un oggetto Brush che specifica un oggetto Color e le coordinate iniziali per la creazione del testo.

  4. Eliminare o impostare come commento la riga originale Picture1.Print("Visual Basic ROCKS!").

  5. Individuare l'elemento UPGRADE_ISSUE successivo, Picture1.Cls(). Sostituire il codice con quanto segue:

    g.Clear(Picture1.BackColor)
    
  6. Individuare l'ultimo elemento UPGRADE_ISSUE, Picture1.PaintPicture. Aggiungere il codice seguente:

    g.DrawImage(sourceImage.Image, CSng(LeftPos * Picture1.Size.Width), _
      0)
    

    In questo caso, il metodo DrawImage della classe Graphics sostituisce il metodo PaintPicture.

  7. Eliminare o impostare come commento la riga originale Picture1.PaintPicture(sourceImage, LeftPos * VB6.PixelsToTwipsX(Picture1.Width), 0).

  8. Aggiungere il codice che segue alla fine della routine:

    g.Dispose()
    

    Il metodo Dispose è necessario per liberare le risorse di memoria associate all'oggetto Graphics.

Per eseguire il test dell'applicazione

  1. Scegliere Avvia dal menu Debug.

    Nota:

    Se viene richiesto di salvare il file della soluzione, scegliere Salva per salvare il file ed eseguire l'applicazione.

  2. Fare clic sul pulsante ShowImage.

    Durante il disegno si noterà uno sfarfallio dell'immagine. Lo sfarfallio è dovuto al fatto che l'intera area viene cancellata prima che ciascuna immagine aggiornata venga disegnata sullo schermo.

Ulteriori modifiche dell'applicazione

Per ovviare a questo problema, disegnare solo sulle parti necessarie dello schermo, anziché utilizzare l'intera area rappresentata dall'oggetto Graphics. È inoltre opportuno assicurarsi che, quando l'immagine viene disegnata sullo schermo, tutti i pixel che rimangono sullo schermo dopo l'ultima chiamata a DrawImage() vengano oscurati con il colore di sfondo. Poiché l'immagine si sposta da destra verso sinistra, è necessario oscurare solo i pixel aggiuntivi a destra dell'immagine.

Per risolvere il problema di sfarfallio sullo schermo

  1. Nella routine Timer1_Tick sostituire il metodo g.Clear(Picture1.BackColor) con il codice seguente:

    Dim imageWidth As Integer = sourceImage.Image.Width
    Dim imageHeight As Integer = sourceImage.Image.Height
    Dim left As Double = imageWidth + (Picture1.Size.Width * LeftPos)
    
    g.FillRectangle(New SolidBrush(Me.BackColor), _
      New Rectangle(left, 0, 6, imageHeight))
    

    Al posto del metodo Clear utilizzare il metodo FillRectangle, che usa il colore di sfondo per oscurare eventuali pixel rimanenti a destra dell'immagine che viene disegnata. Per eseguire questa operazione, è necessario prima eseguire il calcolo della coordinata all'estrema sinistra del rettangolo, eseguito dalle prime tre righe del codice.

  2. Scegliere Avvia dal menu Debug.

  3. Fare clic sul pulsante ShowImage.

    Si noterà che nello spostamento dell'immagine non sarà più presente lo sfarfallio.

È tuttavia necessario risolvere un ulteriore problema. Il tipo di carattere del messaggio visualizzato nel controllo PictureBox è di dimensione inferiore rispetto alla versione originale, in quanto la proprietà Font del controllo PictureBox nell'applicazione Visual Basic 6.0 è stata impostata su Arial Bold 16 in fase di progettazione. Non esiste alcuna proprietà Font per il controllo PictureBox di Visual Basic 2008. Al suo posto viene utilizzato il tipo di carattere predefinito del form (Me.Font). Per ovviare al problema, dichiarare un nuovo oggetto Font.

Per correggere il tipo di carattere

  1. Nella routine Timer1_Tick aggiungere la dichiarazione seguente:

    Dim f As System.Drawing.Font = New System.Drawing.Font("Arial", _
      16, FontStyle.Bold)
    
  2. Nella chiamata a g.DrawString modificare il parametro relativo al tipo di carattere da Me.Font a f.

  3. Scegliere Avvia dal menu Debug.

  4. Fare clic sul pulsante ShowImage.

    Il testo verrà visualizzato nel tipo di carattere corretto.

L'applicazione è ora analoga a quella originale Visual Basic 6.0 e verrà aggiunto del codice per migliorarne le prestazioni. L'aggiornamento dell'applicazione è stato infatti eseguito al fine di sfruttare appieno le funzionalità offerte da Visual Basic 2008.

Nel passaggio successivo verranno aggiunte le funzionalità necessarie per creare l'effetto di dissolvenza alla chiusura del form.

Nota:

L'effetto di dissolvenza non è visibile su uno schermo a 256 colori. Per vedere l'effetto, sarà pertanto necessario impostare l'intensità del colore su 65.536 colori o su 16,8 milioni di colori. La proprietà Opacity è disponibile solo in Windows XP.

Per migliorare le prestazioni dell'applicazione

  1. Nell'editor di codice selezionare (Eventi Form1) dalla casella di riepilogo a discesa Nome classe.

  2. Nella casella di riepilogo a discesa Nome metodo selezionare l'evento FormClosing.

  3. Nella routine Form1_FormClosing aggiungere il codice seguente:

    Dim i As Single
    For i = 1 To 0 Step -0.1
      Me.Opacity = i
      Application.DoEvents()
      System.Threading.Thread.Sleep(100)
    Next
    
  4. Scegliere Avvia dal menu Debug.

  5. Chiudere il form e osservare l'effetto di dissolvenza.

    È possibile controllare la velocità di dissolvenza aumentando il valore del parametro Step oppure riducendo il ritardo di Sleep.

Vedere anche

Concetti

Grafica per gli utenti di Visual Basic 6.0

Riferimenti

Panoramica sui Windows Form

Altre risorse

Aggiornamento da Visual Basic 6.0