- 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 .... :
- Criar um novo projeto para a versão .NET a partir da versão do VB 6
- Copiar os arquivos de formulário e de classes para o novo projeto
- Gerar um relatório que indica os componentes do projeto que foram migrados com sucesso e os componentes que não conseguiram ser migrados
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 :
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: