Contornando problemas na migração VB6 para VB.NET


Nem tudo são flores na migração de código do VB6 para o VB.NET. O assistente tenta fazer um bom trabalho mas dependendo do seu caso o resultado pode ser frustrante.

Neste artigo vou procurar mostrar alguns dos problemas que ocorrem na migração e uma forma de contorná-los.

1- Substituindo funções gráficas

Se você ainda não sabe , os métodos gráficos Line, Circle, Print , PaintPicture e Cls foram removidas do Form e do PictureBox.

Agora para obter o mesmo efeito você usando Windows Forms você usa a livraria objeto .NET GDI+ que possui um conjunto muito mais rico de funções gráficas.

Portanto se você estiver usando os métodos gráficos citados nos formulários Windows da sua aplicação VB6 eles não serão suportados na migração para o VB.NET.

Vamos supor que você tenha uma aplicação VB6 que contém um formulário Windows com um botão e que no evento Click deste botão exista o código abaixo:

Private Sub Command1_Click()
   Me.Line (0, 200)-(2000, 200)
   Me.Circle (300, 300), 100

End Sub

Vamos efetuar a migração deste projeto VB6 para VB.NET usando o Upgrade Wizard. Se você não lembra como faz isto veja abaixo as etapas para chamar o assistente de migração:

No Menu File do VS.NET selecione Open e seguir Convert...
Na Janela Convert selecione - Visual Basic .NET Upgrade Wizard e a seguir clique no botão OK.
Na tela 1 do Visual Basic Upgrade Wizard clique em Next>
Na tela 3 do Assistente selecione o nome do projeto VB6 que deseja Migrar e clique no botão Next>
Na tela 3 informe o tipo de projeto a migrar. No caso o tipo é EXE. Clique em Next>
Na tela 4 do assistente informe o local para onde deseja efetuar a migração do seu projeto VB6.
Na tela 5 o assistente lhe dará algumas informações e solicitará que você clique no botão Next>
Na tela 6 o assistente apresentará o processo de conversão.
Ao final será apresentado no VS.NET o projeto migrado. No caso será algo parecido com a figura ao lado.

Parece que deu tudo certo , não é mesmo...  mas não deu certo.

Se você abrir a janela de código irá se deparar com o seguinte código:

Private Sub Command1_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Command1.Click
'UPGRADE_ISSUE: Form method Form1.Line was not upgraded. Click for more: 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup2064"'
Me.Line (0, 200) - (2000, 200)
'UPGRADE_ISSUE: Form method Form1.Circle was not upgraded. Click for more: 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup2064"'
Me.Circle (300, 300), 100
End Sub

Conclusão: os dois métodos (Line e Circle) não podem ser automaticamente migrados para o VB.NET. Os métodos causam erro de compilação no VB.NET pois eles não estão disponíveis no objeto Formulário.

Aonde foram os métodos gráficos então ???

Elementar , meu caro Watson , eles estão no objeto gráfico GDI+. Para usar o GDI+ para criar gráficos você segue os seguintes passos:

O código abaixo irá desenhar uma linha e um círculo exatamente como foi feito no código VB6:

Private Sub Command1_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Command1.Click

       Dim g As Graphics = Me.CreateGraphics

        g.DrawLine(Pens.Black, 0, 20, 100, 20)
        g.DrawEllipse(Pens.Black, 24, 24, 30, 30)
       g.Dispose()
End Sub

O código desenha uma linha de comprimento 100 e um circulo de diâmetro igual a 24. (As coordenadas são em pixels e o VB6 usa twips)

Não existe a propriedade AutoRedraw no VB.NET logo , se o formulário for minimizado , escondido ou movido fora da tela , a linha e o círculo que foram desenhados serão apagados.

Para obter o mesmo efeito o VB.NET fornece para o formulário Windows o evento Paint. Este evento é chamado cada vez que uma parte do  formulário é redesenhado.  O código deve ser colocando então no evento Paint. Como o sistema passa o objeto gráfico para o evento , não precisamos mais criá-lo:

    Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
        e.Graphics.DrawLine(Pens.Black, 0, 20, 100, 20)
        e.Graphics.DrawEllipse(Pens.Black, 24, 24, 30, 30)
    End Sub

Para saber mais sobre os métodos gráficos  e GDI+ veja os artigos:

Eu sei , é apenas VB , mas eu gosto...

Veja os Destaques e novidades do SUPER DVD Visual Basic  (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Veja mais sistemas completos para a plataforma .NET no Super DVD .NET , confira...

Quer aprender C# ??

Chegou o Super DVD C#  com exclusivo material de suporte e vídeo aulas com curso básico sobre C#.

Veja também os Cursos com vídeo aulas e projetos exemplos:

      Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti