- Migrando minha primeira aplicação VB6 para o VB.NET


Se até agora você esta contente com o Visual Basic 6.0 , e , como quem esta confortavelmente instalado , observa toda a movimentação com a chegada da plataforma VB.NET como quem não quer nada com o 'peixe' ; ou , se você está com pensamentos do tipo : 'vou deixar a poeira assentar para começar a me mexer...'  , acho melhor você por as 'barbas de molho' ...

Não que eu esteja te 'cutucando' para que você abandone o VB6 e passe usar o VB.NET como sua plataforma de desenvolvimento a partir de hoje , nada disto !! , mas é bom você sair um pouco desta letargia e , como alguém que não quer nada , procurar se atualizar e conhecer tudo sobre a plataforma .NET (principalmente o VB.NET)

Você sabia que o Visual Studio .NET possui um assistente de migração para o VB.NET que ajuda a migrar aplicações desenvolvidas em versões anteriores do Visual Basic ( melhor dizer a partir da versão 6.0) para o VB.NET ? Estou falando do : Visual Basic Upgrade Wizard.

Neste artigo eu vou mostrar como podemos usar este assistente para nos ajudar a migrar uma aplicação feita no Visual Basic 6.0 para o VB.NET. Primeiro eu vou criar uma aplicação simples no VB 6.0 e depois vamos ver como podemos fazer a migração usando o assistente e todas as implicações que isto vai nos trazer...

Criando uma aplicação simples no Visual Basic 6.0

Vamos criar uma aplicação simples no VB 6.0 . Ela terá apenas dois formulários ; em um formulário vamos exibir os dados do banco de dados Northwind.mdb , tabela produtos , em um controle -  Microsoft Hierarchical Flexgrid e no outro vamos usar o Clipboard (área de transferência) do windows.

1- Inicie no Visual Basic 6.0 um projeto do tipo Standard.EXE e altere o nome do formulário padrão para frmVB6_ADO;

2- No menu Project opção Components... inclua uma referência a - Microsoft Hierarchical FlexGrid Control 6.0  e na opção References... inclua a referência a - Microsoft Activex Data Object 2.X .

3- A seguir insira o controle MSHFlexGrid - MSHFlexgrid1 - no formulário e insira também um botão de comando - command1 - com a propriedade Caption definida como - &OK . Veja abaixo :

Private Sub Form_Load()
Dim cn As Connection
Dim rs As Recordset

Set cn = New ADODB.Connection
cn.ConnectionString = "Provider = _  & Microsoft.Jet.OLEDB.4.0;Data _ & Source=C:\teste\Nwind_2.mdb"
cn.Open

Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient
rs.Open "Select * from produtos", cn

Set MSHFlexGrid1.DataSource = rs

End Sub

O código ao lado da figura usa uma conexão ADO para abrir o banco de dados Nwind_2.mdb ,  e exibir todos os campos da tabela Produtos. Fazemos isto atribuindo á propriedade DataSource do controle MSHFlexgrid a instrução SQL.

Ao executar a aplicação iremos ter a janela ao lado exibindo todos os registros da tabela Produtos.

Não nos preocupamos em configurar a exibição dos dados pois nosso foco será a migração para o VB.NET

Vamos agora incluir no novo formulário ao nosso projeto ; selecione a opção Project -> Add Form   - Form; altere a seguir o nome do formulário para frmClipboard .

Insira uma caixa de texto no formulário e na propriedade Text informe - Minha primeira aplicação migrada para VB.NET.

Agora insira dois botões de comando e altere a propriedade Caption para de command1 para  &Copiar e de command2 - para &Colar.. Veja o layout abaixo:

Private Sub Command1_Click()
  Clipboard.SetText Text1.SelText
End Sub

Private Sub Command2_Click()
   Text1.SelText = Clipboard.GetText
End Sub
 

O código ao lado da figura  representa a ação de cada evento Click dos botões de comando. No botão command1 copiamos o texto da caixa de texto - text1.text para o ClipBoard ; no  botão de command2 - Colamos o valor copiado para a caixa de texto - text1.text.

Migrando sua aplicação para o VB.NET

Já temos nossa aplicação pronta no VB 6.0 . Vamos migrar a dita cuja para o VB.NET ? Bem , vamos tentar...

Luzes , câmera , ação .... :

  1. Inicie o Microsoft Visual Studio .NET
  2. Clique na opção - Open Project - e selecione o projeto anterior criado no VB 6.0
  3. O VB.NET percebe que o projeto pertence a uma versão anterior e inicia assistente de migração - Upgrade Wizard - Nesta tela o assistente apenas dá informações sobre a tarefa que irá realizar:
    1. Criar um novo projeto a partir da sua versão anterior do VB.
    2. Copiar os formulários e classes para o novo projeto
    3. Criar um relatório de atualização que irá compor o novo projeto

 

  1. Clique no botão Next . A tela abaixo irá surgir ; nela você deverá escolher um tipo de aplicação a ser convertida : EXE ou DLL , e , definir algumas opções (geralmente o Wizard faz isto para você)

  1. Clique no botão - Next . Na tela a seguir você deve informar o local onde deseja criar o seu novo projeto. Por padrão o Assistente usa o diretório com o nome do seu projeto e a extensão .NET.(perceba que o Wizard sugere o nome do projeto que será migrado)

  1. A próxima tela informa que tudo esta pronto para começar a migração. Clique em - Next

  1. O Assistente de migração começa a realizar a migração informando o tempo estimado.(Deve demorar de 30 a 60 segundos dependendo do tamanho do projeto)

  1. Ao terminar , o Assistente de migração deverá ter concluído as seguintes tarefas:
Vamos dar uma olhada no novo projeto ?  Curioso hein ??? No Solution Explorer veremos os arquivos gerados pelo Assistente : os formulários e um arquivo htm chamado : _UpgradeReport.htm.

Clique duas vezes sobre o arquivo : _UpgradeReport.htm

Como resultado teremos a tela exibida abaixo ; nela temos o resultado da nossa migração , uma lista detalhada de todos os problemas encontrados na migração. Perceba que o houve problemas na migração do formulário frmclipboard . O relatório apresenta um resumo da atualização de todos os artigos do projeto . As colunas exibidas são :

Vamos expandir o item - frmclipboard - (Clique no sinal de + ). Veja o comentário indicando que os comandos Clipboard.SetText e Clipboard.GetText não foram migrados.

O relatório acima indica os arquivos que apresentaram problemas durante a migração. Vejamos o significado de cada coluna :

  1. # : indica o número do problema
  2. Severity : indica a gravidade do problema ocorrido.
  3. Location : O local onde se encontra o problema ( evento , função , procedure, ..)
  4. Object Type : O tipo do objeto onde o problema ocorreu.
  5. Object Name : O nome do objeto que contém o projeto.
  6. Property : Propriedade do objeto que apresenta o problema.
  7. Description : A descrição do problema , com um link para a MSDN detalhando o ocorrido.

Percebeu que todos os formulário mantiveram o mesmo nome que usaram na versão anterior ; somente a extensão foi alterada de .frm para .vb

Voltando a janela Solution Explorer expanda o item - References.

 

Perceba que todos os componentes necessários para a migração ,tanto Visual Basic como ADO , foram incluídos automaticamente.

 

 

Vamos clicar duas vezes sobre o formulário frmvb6_ado.vb e clique em View Code. A seguir expanda a região - Upgrade Support.

 

Esta região mostra como o Visual Studio.NET configura várias propriedades e variáveis para suportar o código migrado.

 

Se fizermos o mesmo para o formulário frmclipboard.vb veremos que assistente inclui um comentário no código que não conseguir migrar.

Vejamos a seguir o código completo para o formulário frmvb6_ado.vbp:

Option Strict Off
Option Explicit On

Friend Class Form1
Inherits System.Windows.Forms.Form
#Region "Windows Form Designer generated code "
Public Sub New()
MyBase.New()
If m_vb6FormDefInstance Is Nothing Then
  If m_InitializingDefInstance Then
      m_vb6FormDefInstance = Me
  Else
   Try
    'For the start-up form, the first instance created is the default instance.
   
If System.Reflection.Assembly.GetExecutingAssembly.EntryPoint.DeclaringType Is Me.GetType Then
       m_vb6FormDefInstance = Me
    End If
   Catch
   End Try
  End If
End If
'This call is required by the Windows Form Designer.
InitializeComponent()
End Sub
'Form overrides dispose to clean up the component list.
Protected Overloads Overrides Sub Dispose(ByVal Disposing As Boolean)
If Disposing Then
If Not components Is Nothing Then
components.Dispose()
End If
End If
MyBase.Dispose(Disposing)
End Sub
'Required by the Windows Form Designer
Private components As System.ComponentModel.Container
Public ToolTip1 As System.Windows.Forms.ToolTip
Public WithEvents Command2 As System.Windows.Forms.Button
Public WithEvents Command1 As System.Windows.Forms.Button
Public WithEvents MSHFlexGrid1 As AxMSHierarchicalFlexGridLib.AxMSHFlexGrid
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.

<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
Dim resources As System.Resources.ResourceManager = New System.Resources.ResourceManager(GetType(Form1))
Me.components = New System.ComponentModel.Container()
Me.ToolTip1 = New System.Windows.Forms.ToolTip(components)
Me.ToolTip1.Active = True
Me.Command2 = New System.Windows.Forms.Button
Me.Command1 = New System.Windows.Forms.Button
Me.MSHFlexGrid1 = New AxMSHierarchicalFlexGridLib.AxMSHFlexGrid
CType(Me.MSHFlexGrid1, System.ComponentModel.ISupportInitialize).BeginInit()
Me.Text = "VB6 ADO "
Me.ClientSize = New System.Drawing.Size(414, 250)
Me.Location = New System.Drawing.Point(4, 30)
Me.StartPosition = System.Windows.Forms.FormStartPosition.WindowsDefaultLocation
Me.Font = New System.Drawing.Font("Arial", 8!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.BackColor = System.Drawing.SystemColors.Control
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Sizable
Me.ControlBox = True
Me.Enabled = True
Me.KeyPreview = False
Me.MaximizeBox = True
Me.MinimizeBox = True
Me.Cursor = System.Windows.Forms.Cursors.Default
Me.RightToLeft = System.Windows.Forms.RightToLeft.No
Me.ShowInTaskbar = True
Me.HelpButton = False
Me.WindowState = System.Windows.Forms.FormWindowState.Normal
Me.Name = "Form1"
Me.Command2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
Me.Command2.Text = "&Copiar/Colar"
Me.Command2.Size = New System.Drawing.Size(73, 17)
Me.Command2.Location = New System.Drawing.Point(8, 232)
Me.Command2.TabIndex = 2
Me.Command2.BackColor = System.Drawing.SystemColors.Control
Me.Command2.CausesValidation = True
Me.Command2.Enabled = True
Me.Command2.Cursor = System.Windows.Forms.Cursors.Default
Me.Command2.RightToLeft = System.Windows.Forms.RightToLeft.No
Me.Command2.TabStop = True
Me.Command2.Name = "Command2"
Me.Command1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
Me.Command1.Text = "&OK"
Me.Command1.Size = New System.Drawing.Size(65, 17)
Me.Command1.Location = New System.Drawing.Point(344, 232)
Me.Command1.TabIndex = 1
Me.Command1.BackColor = System.Drawing.SystemColors.Control
Me.Command1.CausesValidation = True
Me.Command1.Enabled = True
Me.Command1.Cursor = System.Windows.Forms.Cursors.Default
Me.Command1.RightToLeft = System.Windows.Forms.RightToLeft.No
Me.Command1.TabStop = True
Me.Command1.Name = "Command1"
MSHFlexGrid1.OcxState = CType(resources.GetObject("MSHFlexGrid1.OcxState"), System.Windows.Forms.AxHost.State)
Me.MSHFlexGrid1.Size = New System.Drawing.Size(401, 217)
Me.MSHFlexGrid1.Location = New System.Drawing.Point(8, 8)
Me.MSHFlexGrid1.TabIndex = 0
Me.MSHFlexGrid1.Name = "MSHFlexGrid1"
Me.Controls.Add(Command2)
Me.Controls.Add(Command1)
Me.Controls.Add(MSHFlexGrid1)
CType(Me.MSHFlexGrid1, System.ComponentModel.ISupportInitialize).EndInit()
End Sub
#End Region
#Region "Upgrade Support "
Private Shared m_vb6FormDefInstance As Form1
Private Shared m_InitializingDefInstance As Boolean
Public Shared Property DefInstance() As Form1
Get
If m_vb6FormDefInstance Is Nothing OrElse m_vb6FormDefInstance.IsDisposed Then
m_InitializingDefInstance = True
m_vb6FormDefInstance = New Form1()
m_InitializingDefInstance = False
End If
DefInstance = m_vb6FormDefInstance
End Get
Set
m_vb6FormDefInstance = Value
End Set
End Property
#End Region
Private Sub Command1_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Command1.Click
Me.Close()
End Sub

Private Sub Command2_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Command2.Click
Form2.DefInstance.ShowDialog()
End Sub

Private Sub Form1_Load(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles MyBase.Load
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset

cn = New ADODB.Connection
cn.ConnectionString = "Provider = Microsoft.Jet.OLEDB.4.0;Data Source=C:\teste\Nwind_2.mdb"
cn.Open()

rs = New ADODB.Recordset
rs.CursorLocation = ADODB.CursorLocationEnum.adUseClient
rs.Open("Select * from produtos", cn)

MSHFlexGrid1.DataSource = rs


End Sub
End Class

Agora o código para o formulário frmclipboard.vb :

Option Strict Off
Option Explicit On

Friend Class Form2
Inherits System.Windows.Forms.Form
#Region "Windows Form Designer generated code "
Public Sub New()
MyBase.New()
If m_vb6FormDefInstance Is Nothing Then
If m_InitializingDefInstance Then
m_vb6FormDefInstance = Me
Else
Try
'For the start-up form, the first instance created is the default instance.
If System.Reflection.Assembly.GetExecutingAssembly.EntryPoint.DeclaringType Is Me.GetType Then
m_vb6FormDefInstance = Me
End If
Catch
End Try
End If
End If
'This call is required by the Windows Form Designer.
InitializeComponent()
End Sub
'Form overrides dispose to clean up the component list.
Protected Overloads Overrides Sub Dispose(ByVal Disposing As Boolean)
If Disposing Then
If Not components Is Nothing Then
components.Dispose()
End If
End If
MyBase.Dispose(Disposing)
End Sub
'Required by the Windows Form Designer
Private components As System.ComponentModel.Container
Public ToolTip1 As System.Windows.Forms.ToolTip
Public WithEvents Command2 As System.Windows.Forms.Button
Public WithEvents Command1 As System.Windows.Forms.Button
Public WithEvents Text1 As System.Windows.Forms.TextBox
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.

<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
Me.components = New System.ComponentModel.Container()
Me.ToolTip1 = New System.Windows.Forms.ToolTip(components)
Me.ToolTip1.Active = True
Me.Command2 = New System.Windows.Forms.Button
Me.Command1 = New System.Windows.Forms.Button
Me.Text1 = New System.Windows.Forms.TextBox
Me.Text = "VB6 - ClipBoard"
Me.ClientSize = New System.Drawing.Size(312, 120)
Me.Location = New System.Drawing.Point(4, 30)
Me.StartPosition = System.Windows.Forms.FormStartPosition.WindowsDefaultLocation
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.BackColor = System.Drawing.SystemColors.Control
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Sizable
Me.ControlBox = True
Me.Enabled = True
Me.KeyPreview = False
Me.MaximizeBox = True
Me.MinimizeBox = True
Me.Cursor = System.Windows.Forms.Cursors.Default
Me.RightToLeft = System.Windows.Forms.RightToLeft.No
Me.ShowInTaskbar = True
Me.HelpButton = False
Me.WindowState = System.Windows.Forms.FormWindowState.Normal
Me.Name = "Form2"
Me.Command2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
Me.Command2.Text = "&Colar"
Me.Command2.Size = New System.Drawing.Size(89, 25)
Me.Command2.Location = New System.Drawing.Point(168, 64)
Me.Command2.TabIndex = 2
Me.Command2.BackColor = System.Drawing.SystemColors.Control
Me.Command2.CausesValidation = True
Me.Command2.Enabled = True
Me.Command2.Cursor = System.Windows.Forms.Cursors.Default
Me.Command2.RightToLeft = System.Windows.Forms.RightToLeft.No
Me.Command2.TabStop = True
Me.Command2.Name = "Command2"
Me.Command1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
Me.Command1.Text = "&Copiar"
Me.Command1.Size = New System.Drawing.Size(97, 25)
Me.Command1.Location = New System.Drawing.Point(48, 64)
Me.Command1.TabIndex = 1
Me.Command1.BackColor = System.Drawing.SystemColors.Control
Me.Command1.CausesValidation = True
Me.Command1.Enabled = True
Me.Command1.Cursor = System.Windows.Forms.Cursors.Default
Me.Command1.RightToLeft = System.Windows.Forms.RightToLeft.No
Me.Command1.TabStop = True
Me.Command1.Name = "Command1"
Me.Text1.AutoSize = False
Me.Text1.Size = New System.Drawing.Size(233, 25)
Me.Text1.Location = New System.Drawing.Point(40, 32)
Me.Text1.TabIndex = 0
Me.Text1.Text = "Minha primeira aplicação migrada para VB.NET"
Me.Text1.AcceptsReturn = True
Me.Text1.TextAlign = System.Windows.Forms.HorizontalAlignment.Left
Me.Text1.BackColor = System.Drawing.SystemColors.Window
Me.Text1.CausesValidation = True
Me.Text1.Enabled = True
Me.Text1.ForeColor = System.Drawing.SystemColors.WindowText
Me.Text1.HideSelection = True
Me.Text1.ReadOnly = False
Me.Text1.Maxlength = 0
Me.Text1.Cursor = System.Windows.Forms.Cursors.IBeam
Me.Text1.MultiLine = False
Me.Text1.RightToLeft = System.Windows.Forms.RightToLeft.No
Me.Text1.ScrollBars = System.Windows.Forms.ScrollBars.None
Me.Text1.TabStop = True
Me.Text1.Visible = True
Me.Text1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D
Me.Text1.Name = "Text1"
Me.Controls.Add(Command2)
Me.Controls.Add(Command1)
Me.Controls.Add(Text1)
End Sub
#End Region
#Region "Upgrade Support "
Private Shared m_vb6FormDefInstance As Form2
Private Shared m_InitializingDefInstance As Boolean
Public Shared Property DefInstance() As Form2
Get
If m_vb6FormDefInstance Is Nothing OrElse m_vb6FormDefInstance.IsDisposed Then
m_InitializingDefInstance = True
m_vb6FormDefInstance = New Form2()
m_InitializingDefInstance = False
End If
DefInstance = m_vb6FormDefInstance
End Get
Set
m_vb6FormDefInstance = Value
End Set
End Property
#End Region
Private Sub Command1_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Command1.Click
'UPGRADE_ISSUE: Clipboard method Clipboard.SetText was not upgraded. Click for more: ms-help://MS.MSDNVS/vbcon/html/vbup2069.htm
Clipboard.SetText(Text1.SelectedText)
End Sub

Private Sub Command2_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Command2.Click
'UPGRADE_ISSUE: Clipboard method Clipboard.GetText was not upgraded. Click for more: ms-help://MS.MSDNVS/vbcon/html/vbup2069.htm
Text1.SelectedText = Clipboard.GetText
End Sub

End Class

O código que está em azul é o código que efetivamente você vai ver no projeto.

Concluímos que embora o Upgrade Wizard ajude muito no processo de migração , com as mudanças ocorridas na linguagem VB.NET , muitas incompatibilidades deverão ocorrer.

Se você quer uma migração menos traumática o ideal é ajustar a sua antiga aplicação preparando para a migração.

Irei abordar como fazer isto num próximo artigo.

Até lá...

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