Você está na página 1de 20

Preparando Suas Aplicaes Visual Basic 6.0 para a Atualizao para o Visual Basic.

NET
Microsoft Corporation Outubro de 2000 Resumo: Este documento proporciona recomendaes para desenvolvedores Microsoft Visual Basic que pretendem atualizar suas aplicaes para o Visual Basic.NET. Ele contm informao sobre a Ferramenta de Atualizao do Visual Basic.NET e discute orientaes arquiteturais que possibilitam uma atualizao suave do Visual Basic 6 para o Visual Basic.NET. (26 pginas impressas)

Contedo
Viso Geral O Que Visual Basic.NET? Porque o Visual Basic.NET No 100% Compatvel? Atualizando para o Visual Basic.NET Trabalhando com o Visual Basic 6.0 e com o Visual Basic.NET Recomendaes Arquiteturais Aplicaes baseadas em Browser Projetos Cliente/Servidor Aplicaes de Uma nica Camada Dados Atualizao Variant para Object Integer para Short Sintaxe de Propriedade Formulrios Visual Basic para Windows Forms Interfaces Relatrio de Atualizao e Comentrios Recomendaes de Programao Use Early-Binding Use Date para Armazenar Datas Resolva Propriedades Padro sem Parmetro Use Comparaes Booleanas com AND/OR/NOT Evite Propagao de Null Use Arrays Delimitados por Zero Use Constantes Ao Invs de Valores Bsicos Arrays e Strings de Tamanho Fixo em Tipos Definidos pelo Usurio Evite Recursos Legados Windows APIs Consideraes para Formulrios e Controles

Viso Geral
Este documento proporciona recomendaes para desenvolvedores Microsoft Visual Basic que pretendem atualizar suas aplicaes para o Microsoft Visual Basic.NET. O Visual Basic.NET vai abrir e atualizar projetos Visual Basic 6.0 para tecnologias Visual Basic.NET, mas na maioria dos casos voc ter que fazer algumas modificaes nos seus projetos aps traz-los para o Visual Basic.NET. O propsito deste documento recomendar como projetar e implementar seus projetos Visual Basic atuais para minimizar o nmero de alteraes que voc ter que fazer quando eles forem atualizados para o Visual Basic.NET. Quando apropriado, ns usamos novas construes de linguagem; entretanto, este documento no pretende ser uma referncia da linguagem Visual Basic.NET.

Nota O Visual Basic.NET ainda est em desenvolvimento; alguns detalhes de compatibilidade podem mudar antes do lanamento do produto. Seguir as orientaes presentes neste documento no garante que seu cdigo no vai precisar ser alterado; as orientaes pretendem somente reduzir a quantidade de trabalho necessria para a converso.

O Que Visual Basic.NET?


Visual Basic.NET a prxima verso do Visual Basic. Ao invs de simplesmente incluir alguns recursos novos no Visual Basic 6.0, a Microsoft reprojetou o produto para tornar mais fcil do que nunca escrever aplicaes distribudas tais como sistemas n-tier Web e corporativos. O Visual Basic.NET possui dois novos pacotes de formulrios (Windows Forms e Web Forms); uma nova verso do ADO para acessar fontes de dados desconectadas; e linguagem simplificada, removendo palavras chave legadas, melhorando a segurana de tipo e expondo construes de baixo nvel que os desenvolvedores avanados requisitam. Estes novos recursos abrem novas portas para o desenvolvedor Visual Basic: Com Web Forms e ADO.NET, agora voc pode desenvolver rapidamente Web sites escalveis; com herana, a linguagem agora suporta verdadeiramente programao orientada a objeto; Windows Forms suporta nativamente acessibilidade e herana visual; e implantar suas aplicaes agora to simples quanto copiar seus executveis e componentes de diretrio para diretrio. Agora o Visual Basic.NET est totalmente integrado s outras linguagens Microsoft Visual Studio.NET. Alm de voc poder desenvolver componentes de aplicao em linguagens de programao diferentes, suas classes agora podem herdar classes escritas em outras linguagens usando herana cross-language. Com o debugger unificado, agora voc pode fazer o debug de aplicaes de mltiplas linguagens, independente de elas estarem rodando localmente ou em computadores remotos. Finalmente, independente da linguagem utilizada, o Microsoft .NET Framework proporciona um rico conjunto de APIs para o Microsoft Windows e a Internet.

Porque o Visual Basic.NET No 100% Compatvel?


Havia duas opes para o projeto do Visual Basic.NETfazer o retrofit da base de cdigo existente para que ela rodasse no topo do .NET Framework, ou comear tudo de novo, aproveitando completamente a plataforma. Para entregar os recursos mais requisitados pelos consumidores (ex. herana, threading), proporcionar acesso total e sem limite plataforma e garantir que o Visual Basic acompanhasse a prxima gerao das aplicaes Web, a deciso certa foi construir tudo desde o incio para a nova plataforma. Por exemplo, muitos dos novos recursos encontrados no Windows Forms poderiam ter sido includos na base de cdigo existente como novos controles ou mais propriedades. Entretanto, isto acarretaria prejuzo para todos os outros grandes recursos inerentes ao Windows Forms, como segurana e herana visual. Um dos nossos principais objetivos foi garantir que o cdigo Visual Basic pudesse interoperar totalmente com o cdigo escrito em outras linguagens, como o Microsoft Visual C# ou Microsoft Visual C++, e habilitar o desenvolvedor Visual Basic a utilizar unicamente o .NET Framework, sem recorrer a solues de programao de contorno tradicionalmente necessrias para fazer funcionar as Windows APIs. Agora o Visual Basic possui os mesmos tipos de variveis, arrays, tipos definidos pelo usurio, classes e interfaces que o Visual C++ e qualquer outra linguagem direcionada para o Common Language Runtime; entretanto, ns tivemos que remover alguns recursos da linguagem, tais como strings de tamanho fixo e arrays no baseados em zero. Agora o Visual Basic uma verdadeira linguagem orientada a objeto; alguns recursos no intuitivos e inconsistentes como GoSub/Return e DefInt foram removidos da linguagem. O resultado um Visual Basic com nova energia, que continuar a ser a ferramenta mais produtiva para a criao de aplicaes Windows, e que agora est posicionado como a melhor ferramenta para a criao de Web sites da prxima gerao.

Atualizando para o Visual Basic.NET


O Visual Basic.NET possibilita uma mudana fundamental do desenvolvimento Windows tradicional para a construo de aplicaes n-tier e Web da prxima gerao. Por esta razo, seu cdigo ter que ser atualizado para aproveitar o Visual Basic.NET. Isto acontece automaticamente quando voc abre um projeto Visual Basic 6.0 no Visual Basic.NET: o Assistente de Atualizao orienta voc pelo processo de atualizao e cria um novo projeto Visual Basic.NET (seu projeto existente no alterado). Este processo de mo nica; o novo projeto Visual Basic.NET no pode ser aberto no Visual Basic 6.0. Quando seu projeto atualizado, a linguagem modificada para quaisquer alteraes de sintaxe e seus Formulrios Visual Basic 6.0 so convertidos para Windows Forms. Na maioria dos casos, voc ter que fazer algumas alteraes no seu cdigo aps sua atualizao. Isto necessrio porque certos objetos e recursos de linguagem ou no possuem equivalente no Visual Basic.NET, ou possuem um equivalente muito desigual para uma atualizao automtica. Aps a atualizao, talvez voc tambm queira alterar sua aplicao para aproveitar alguns dos novos recursos do Visual Basic.NET. Por exemplo, Windows Forms suporta control anchoring, para que voc possa remover a maior parte do seu cdigo antigo de dimensionamento de Formulrio Visual Basic 6.0:

Figura 1. Suporte VB.NET para control anchoring Para ajud-lo a fazer as alteraes, aps a atualizao do seu projeto, o Visual Basic.NET inclui um relatrio de atualizao ao seu projeto detalhando quaisquer problemas, e insere comentrios no seu cdigo atualizado alertando para comandos que tero que ser alterados. Como estes comentrios so apresentados como tarefas TO DO na nova janela Task List, voc pode ver facilmente quais alteraes so necessrias e navegar para o comando do cdigo simplesmente efetuando o duplo clique na tarefa. Cada tarefa e item no relatrio de atualizao associado a um tpico online do Help oferecendo orientao posterior sobre porque o cdigo precisa ser alterado e sobre o que voc precisa fazer. Ao seguir as recomendaes neste documento, voc pode minimizar e, em alguns casos, eliminar as alteraes necessrias aps a atualizao do seu projeto para o Visual Basic.NET. Na maioria dos

casos, as recomendaes simplesmente representam boas prticas de programao; entretanto, ns tambm identificamos os objetos e mtodos que no possuem equivalentes e que deveriam ser usados com parcimnia se voc pretende atualizar seu projeto para o Visual Basic.NET.

Trabalhando com o Visual Basic 6.0 e com o Visual Basic.NET


O Visual Basic.NET suporta a atualizao de projetos Visual Basic 6.0; se voc possui um projeto escrito nas verses de 1 a 5 do Visual Basic, ns recomendamos a voc carreg-lo no VB6 (escolhendo atualizar controles Microsoft ActiveX), compilar e salvar o projeto antes de atualiz-lo para o Visual Basic.NET. O Visual Basic.NET e o Visual Basic 6.0 podem ser instalados no mesmo computador e rodar ao mesmo tempo. Da mesma forma, aplicaes escritas em Visual Basic.NET e Visual Basic 6.0 podem ser instaladas e executadas no mesmo computador. Componentes escritos em Visual Basic.NET podem interoperar com componentes COM escritos em verses anteriores do Visual Basic e outras linguagens. Por exemplo, voc pode soltar um controle ActiveX escrito em Visual Basic 6.0 em um Visual Basic.NET Windows Form, usar um objeto COM Visual Basic 6.0 de uma biblioteca de classes Visual Basic.NET, ou incluir uma referncia para uma biblioteca Visual Basic.NET em um executvel Visual Basic 6.0. Componentes compilados no Visual Basic.NET possuem diferenas de run-time sutis dos componentes compilados no Visual Basic 6.0. Para iniciantes, como objetos Visual Basic.NET so liberados atravs de garbage collection, onde objetos so destrudos explicitamente, pode haver um atraso antes que eles sejam realmente removidos da memria. H diferenas adicionais como as alteraes variante/objeto descritas mais adiante neste documento. O resultado combinado destas diferenas que aplicaes Visual Basic.NET tero comportamento em tempo de execuo similar mas no idntico ao das aplicaes Visual Basic 6.0. Alm disso, o Visual Basic.NET torna desnecessria a compatibilidade binria entre componentes Visual Basic.NET e Visual Basic 6.0. Agora os componentes possuem um sistema de verso e implantao mais robusto do que nunca, arquivos podem ser implantados simplesmente efetuando a cpia para um diretrio (no mais RegSvr32), e a atualizao para uma nova verso de um componente to simples quanto substituir o arquivo antigo por um novo arquivo. Tudo o que voc tem a fazer garantir que classes e mtodos so compatveis com a verso anterior.

Recomendaes Arquiteturais
A plataforma .NET apresenta melhorias sobre as arquiteturas anteriores e inclui maior suporte para escalabilidade e aplicaes distribudas apesar do acesso a dados desconectado, transporte de mensagem baseado em HTTP e implantao baseada em cpia de arquivo (no mais registro de componentes). Para aproveitar melhor estes recursos, voc deve projetar suas aplicaes com uma arquitetura similar que voc usaria no Visual Basic.NET.

Aplicaes baseadas em Browser


O Visual Basic 6.0 e o Microsoft Visual Studio 6.0 ofereceram vrias tecnologias para a criao de aplicaes Internet e intranet baseadas em browser: Webclasses Projetos DHTML Documentos ActiveX Active Server Pages (ASP)

O Visual Basic.NET introduz o ASP.NET, uma verso aprimorada do ASP, e melhora a arquitetura com Web Forms, que so pginas HTML com eventos Visual Basic. A arquitetura baseada em servidor. Segue abaixo uma lista de recomendaes e sugestes arquiteturais para o desenvolvimento de aplicaes Visual Basic 6.0 baseadas em browser que sero na sua maioria migradas para projetos Visual Basic.NET: Ns recomendamos o uso das orientaes arquiteturais multi-camada da Microsoft para criar suas aplicaes, criar a interface com ASP e usar objetos COM Visual Basic 6.0 ou Visual C+ + 6.0 na sua lgica de negcio. ASP totalmente suportado no Visual Basic.NET e voc pode continuar a estender suas aplicaes usando ASP, ASP.NET e Web Forms. Objetos de negcio Visual Basic 6.0 e Visual C++ 6.0 podem ser usados sem modificao ou atualizados para o Visual Studio.NET. Aplicaes DHTML contm pginas DHTML e DLLs do lado cliente. Estas aplicaes no podem ser atualizadas automaticamente para o Visual Basic.NET. Ns recomendamos a voc manter estas aplicaes no Visual Basic 6.0. Documentos ActiveX no so suportados no Visual Basic.NET, e como projetos DHTML, no podem ser atualizados automaticamente. Ns recomendamos a voc manter suas aplicaes de documento ActiveX em Visual Basic 6.0 ou, quando possvel, substituir documentos ActiveX por controles do usurio. Documentos ActiveX e aplicaes DHTML do Visual Basic 6.0 podem interoperar com tecnologias Visual Basic.NET. Por exemplo, voc pode navegar de um Visual Basic.NET Web Form para uma pgina DHTML do Visual Basic 6.0, e viceversa. Webclasses no existem mais no Visual Basic.NET. Aplicaes Webclass sero atualizadas para o ASP.NET; entretanto, voc ter que fazer algumas modificaes aps a atualizao. Aplicaes Webclass existentes podem interoperar com Web Forms e aplicaes ASP do Visual Basic.NET, mas para novos projetos ns recomendamos o uso da plataforma Windows DNA do ASP com objetos de negcio do Visual Basic 6.0.

Para maiores informaes sobre a construo de aplicaes com a arquitetura multi-camada da Microsoft, veja o Web site Microsoft Windows DNA.

Projetos Cliente/Servidor
O Visual Basic 6.0 ofereceu vrias tecnologias para a criao de aplicaes cliente/servidor: Formulrios Visual Basic Objetos Microsoft Transaction Server (MTS)/COM+ da camada do meio Controles de usurio

No Visual Basic.NET, h um novo pacote de formulrio: Windows Forms. Windows Forms possui um modelo de objeto diferente dos Formulrios Visual Basic 6.0, mas amplamente compatvel. Quando seu projeto atualizado, Formulrios Visual Basic so convertidos para Windows Forms. O Visual Basic.NET melhora o suporte ao desenvolvimento de servios MTS da camada do meio e componentes COM+. Usando o debugger unificado, voc pode passar de uma aplicao cliente para um componente MTS/COM+ e voltar para o cliente. Voc tambm pode usar o debugger unificado para caminhar por componentes MTS/COM+ do Visual Basic 6.0 (desde que eles estejam compilados no cdigo nativo, com informao de debug simblica e sem otimizaes). O Visual Basic.NET tambm introduz um novo componente da camada do meio, o Web Services. Web Services so hospedados pelo ASP.NET e usam o transporte HTTP permitindo que requisies de

mtodo passem por firewalls. Eles passam e retornam dados usando XML padro da indstria, permitindo que outras linguagens e outras plataformas acessem sua funcionalidade. Embora eles no suportem transaes MTS, voc pode querer alterar seus componentes MTS/COM+ para Web Services em situaes onde voc no precisa de transaes distribudas mas quer interoperar com outras plataformas. Embora no haja nenhum mtodo automtico para isto, a tarefa trivial e pode ser completada em alguns minutos usando uma operao drag-and-drop aps a atualizao do seu projeto para o Visual Basic.NET. Quando seu projeto atualizado, controles de usurio so atualizados para controles Windows; entretanto, configuraes de tag de propriedade customizadas e atribuies de chaves aceleradoras no sero atualizadas.

Aplicaes de Uma Camada


O Visual Basic 6.0 suportou a construo de vrios tipos de aplicaes de uma camada: Aplicaes de banco de dados de uma camada Visual Basic add-ins Programas utilitrios e jogos

Aplicaes de banco de dados de uma camada so caracterizadas por uma aplicao Visual Basic armazenando dados em um banco de dados Microsoft Access. Estas aplicaes sero atualizadas para o Visual Basic.NET com algumas limitaes (veja a seo Dados mais a frente neste documento). Agora que o Visual Basic.NET IDE uma parte totalmente integrada do Visual Studio.NET IDE, o Visual Basic.NET possui um novo modelo de extensibilidade independente de linguagem. Visual Basic.NET add-ins agora so Visual Studio.NET add-ins, e voc pode automatizar e incluir recursos a qualquer linguagem no Visual Studio.NET. Por exemplo, voc pode escrever um Visual Basic.NET add-in que colore novamente um Visual C# Windows Form ou inclui comentrios em uma classe Visual Basic. Para proporcionar esta funcionalidade, o Visual Basic.NET mudou do antigo modelo de extensibilidade, e voc ter que alterar os objetos de extensibilidade na sua aplicao para aproveitar os novos recursos. Muitas aplicaes caem na categoria de programas Utilitrios. Aplicaes utilitrias que manipulam arquivos, parmetros do registry e semelhantes sero freqentemente atualizadas sem a necessidade de quaisquer alteraes adicionais. Aps a atualizao, voc pode aproveitar muitos recursos novos, como o tratamento de exceo na linguagem para capturar erros do file system, e usar classes do registry do .NET Framework para manipular o registry. bom estar ciente que aplicaes que se apoiam em caractersticas de performance especficas do Visual Basic 6.0, como os jogos arcade, provavelmente exigiro algumas modificaes pois o Visual Basic.NET possui caractersticas de performance diferentes. Para o suporte a jogos no Visual Basic.NET, voc pode usar o Microsoft DirectX 7, ou a nova verso do GDI. O GDI+ introduz muitos novos recursos, incluindo o suporte Alpha blending para todas as primitivas de grficos 2-D, anti-aliasing e suporte expandido para formatos de arquivo de imagem.

Dados
O Visual Basic 6.0 props vrios tipos de acesso a dados: ActiveX Data Objects (ADO) Remote Data Objects (RDO) Data Access Objects (DAO)

O Visual Basic.NET introduz uma verso aprimorada do ADO chamada ADO.NET. ADO.NET tem como alvo dados desconectados e proporciona melhorias de performance com relao ao ADO quando

usado em aplicaes distribudas. ADO.NET oferece data binding de leitura/gravao de controles para Windows Forms e data binding somente de leitura para Web Forms. DAO, RDO e ADO ainda podem ser usados no cdigo do Visual Basic.NET, com algumas modificaes triviais (cobertas na seo linguagem deste documento). Entretanto, o Visual Basic.NET no suporta data binding DAO e RDO de controles, controles de dados ou conexo de Usurio RDO. Ns recomendamos que se suas aplicaes contm data binding DAO ou RDO voc as mantenha no Visual Basic 6.0 ou atualize o data binding DAO ou RDO para ADO antes de atualizar seu projeto para o Visual Basic.NET, pois data binding ADO suportado no Windows Forms. Informao sobre como fazer isso est disponvel na Ajuda do Visual Basic 6.0. Em resumo, ns recomendamos o uso de ADO nos seus projetos Visual Basic 6.0.

Atualizao
Quando seu cdigo atualizado, o Visual Basic.NET cria um novo projeto atualizado aproveitando ao mximo as alteraes necessrias de linguagem e objeto para voc. As sees seguintes proporcionam alguns exemplos de como seu cdigo atualizado.

Variant para Object


Verses anteriores do Visual Basic suportavam o tipos de dados Variant, que podia ser atribudo para qualquer tipo primitivo (exceto strings de tamanho fixo), Empty, Error, Nothing e Null. No Visual Basic.NET, a funcionalidade dos tipos de dados Variant e Object combinada em um novo tipo de dados: Object. O tipo de dados Object pode ser atribudo para tipos de dados primitivos, Empty, Nothing, Null e como um ponteiro para um objeto. Quando seu projeto atualizado para o Visual Basic.NET, todas as variveis declaradas como Variant so alteradas para Object. Alm disso, quando inserido cdigo no Editor, a palavra chave Variant substituda por Object.

Integer para Short


No Visual Basic 6.0, o tipo de dados para nmeros inteiros de 16-bits agora Short, e o tipo de dados para nmeros inteiros de 32-bits agora Integer (Long tem agora 64 bits). Quando seu projeto atualizado, os tipos das variveis so alterados: Dim x As Integer dim y as Long atualizado para: Dim x As Short dim y as Integer

Sintaxe de Propriedade
O Visual Basic.NET introduz uma sintaxe mais intuitiva para propriedades, que agrupa Get e Set. Seus comandos de propriedade so atualizados conforme o seguinte exemplo: Property Get MyProperty() As Integer m_MyProperty = MyProperty End Property Property Let MyProperty(NewValue As Integer) m_MyProperty = NewValue End Property atualizado para:

Property MyProperty() As Short Get m_MyProperty = MyProperty End Get Set m_MyProperty = Value End Set End Property

Formulrios Visual Basic para Windows Forms


O Visual Basic.NET possui um novo pacote de formulrios, o Windows Forms, que possui suporte nativo para acessibilidade e possui um editor de menu in-place. Seus Formulrios Visual Basic existentes so atualizados para Windows Forms.

Figura 2. Editor de menu in-place do Windows Forms. (Clique na figura para ampli-la).

Interfaces
Nas verses anteriores do Visual Basic, interfaces para classes pblicas eram sempre escondidas do usurio. No Visual Basic.NET, elas podem ser vistas e editadas no Editor de Cdigo. Quando seu projeto atualizado, voc escolhe ter ou no declaraes de interface criadas automaticamente para suas classes pblicas.

Relatrio de Atualizao e Comentrios


Aps a atualizao do seu projeto, um relatrio de atualizao includo a ele, detalhando quaisquer alteraes que voc ter que fazer no seu cdigo atualizado. Adicionalmente, so includos comentrios no seu cdigo para alert-lo sobre qualquer problema potencial. Estes comentrios aparecem automaticamente na Lista de Tarefas do Visual Studio.NET.

Figura 3. So includos comentrios de atualizao no cdigo Visual Basic e na Lista de Tarefas. (Clique na figura para ver a imagem ampliada).

Recomendaes de Programao
Esta seo proporciona recomendaes sobre como voc deveria escrever cdigo para minimizar as alteraes que voc ter que fazer aps a atualizao do seu projeto para o Visual Basic.NET.

Use Early-Binding
O Visual Basic 6.0 e o Visual Basic.NET suportam objetos late-bound, que a prtica de declarar uma varivel como o tipo de dados Object e atribu-la a uma instncia de uma classe em tempo de execuo. Entretanto, durante o processo de atualizao, objetos late-bound podem introduzir problemas na resoluo de propriedades padro, ou quando o modelo bsico de objeto foi alterado e propriedades, mtodos e eventos tm que ser convertidos. Por exemplo, suponha que voc possui um Formulrio chamado Form1 com um label nomeado Label1; o seguinte cdigo Visual Basic 6.0 poderia definir o ttulo label como SomeText: Dim o As Object Set o = Me.Label1 o.Caption = "SomeText" No Visual Basic.NET Windows Forms, a propriedade Caption de um controle de label agora chamada de Text. Quando seu cdigo atualizado, todas as instncias da propriedade Caption so alteradas para Text, mas como um objeto late-bound no possui tipo, o Visual Basic no pode detectar qual o tipo de objeto, ou se quaisquer propriedades deveriam ser traduzidas. Nestes casos, voc mesmo ter que alterar o cdigo aps a atualizao. Se voc reescrever o cdigo usando objetos early-bound, ele ser atualizado automaticamente: Dim o As Label Set o = Me.Label1 o.Caption = "SomeText"

Sempre que possvel, voc deve declarar variveis com o tipo de objeto apropriado ao invs de simplesmente declar-las como o tipo de dados Object. Nos casos onde voc usa variveis Object e Variant no seu cdigo Visual Basic 6.0, ns recomendamos a voc usar converses explcitas ao assinalar variveis, efetuar operaes nas variveis, ou passar as variveis para uma funo. Por exemplo, a inteno da operao + no cdigo seguinte no est clara: Dim Var1 As Dim Var2 As Dim Var3 As Var1 = "3" Var2 = 4 Var3 = Var1 Variant Variant Variant + Var2 'RUIM: Qual a inteno?

Var1 e Var2 devem ser includas como strings ou integers? O exemplo acima pode resultar em um erro de run-time no Visual Basic.NET. A rescrita da linha final para usar converses explcitas garante que o cdigo ir funcionar: Var3 = CInt(Var1) + CInt(Var2) 'BOM: converso explcita

O Visual Basic.NET suporta funes de overloading com base no tipo do parmetro. Por exemplo, a funo Environ possui agora duas formas: Environ( Expression As Integer) As String Environ( Expression As String ) As String O Visual Basic.NET determina qual funo chamar com base no tipo do parmetro. Se voc passar um inteiro para Environ(), a verso integer ser chamada; se voc passar um string, ento a verso string ser chamada. Cdigo que passa um tipo de dados Variant ou Object para uma funo overloaded pode causar um erro de compilao ou runtime. O uso de uma converso explcita, como no exemplo seguinte, significa que o seu cdigo ir funcionar como desejado aps sua atualizao para o Visual Basic.NET: Dim Dim v = a = a As String v As Variant "Path" Environ(CStr(v))

'BOM: converso explcita

O uso de converses explcitas de objetos late bound uma boa prtica de codificao. Ela facilita a determinao da inteno do cdigo e torna mais fcil para voc mover seu projeto para o Visual Basic.NET.

Use Date para Armazenar Datas


Verses anteriores do Visual Basic suportavam o uso do tipo de dados Double para armazenar e manipular datas. Voc no deve fazer isto no Visual Basic.NET, pois datas no so armazenadas internamente como doubles. Por exemplo, o cdigo seguinte vlido no Visual Basic 6.0, mas pode causar um erro de compilao no Visual Basic.NET: Dim dbl As Double Dim dat As Date dat = Now dbl = dat 'RUIM: Double no pode ser atribudo para uma data dbl = DateAdd("d", 1, dbl) 'RUIM: Double no pode ser usado em funes de data dat = CDate(dbl) 'RUIM: CDate no pode converter um double para uma data

O .NET framework proporciona as funes ToOADate e FromOADate para a converso entre doubles e datas. Entretanto, quando seu projeto atualizado para o Visual Basic.NET, difcil determinar a inteno do cdigo que usa doubles para armazenar datas. Para evitar modificaes desnecessrias no seu cdigo em Visual Basic.NET, use sempre o tipo de dados Date para armazenar datas.

Resolva Propriedades Padro Sem Parmetro


No Visual Basic 6.0, muitos objetos expem propriedades padro, que podem ser omitidas como um atalho de programao. Por exemplo, TextBox possui uma propriedade padro Text, ento ao invs de escrever: MsgBox Form1.Text1.Text voc usa o atalho: MsgBox Form1.Text1 A propriedade padro resolvida quando o cdigo compilado. Alm disso, voc tambm deve usar propriedades padro com objetos late-bound, como no exemplo abaixo: Dim obj As Object Set obj = Form1.Text1 MsgBox obj No exemplo late-bound, a propriedade padro resolvida em tempo de execuo, e o MsgBox mostra o valor da propriedade padro do TextBox como Text1. O Visual Basic.NET no suporta propriedades padro sem parmetro, e consequentemente no permite este atalho de programao. Quando seu projeto atualizado, o Visual Basic.NET resolve as propriedades padro sem parmetro, mas usos de late-bound que se apoiam em resoluo em tempo de execuo no podem ser resolvidos automaticamente. Nestes casos, voc mesmo ter que alterar o cdigo. Uma complicao adicional que muitas bibliotecas implementam propriedades padro usando uma propriedade chamada _Default. _Default age como um proxy, passando chamadas para a propriedade padro real. Dessa forma, quando seu projeto atualizado, algumas propriedades padro sero resolvidas para _Default. O cdigo ainda funcionar como sempre, mas ser mais difcil de entender do que o cdigo escrito explicitamente usando-se a propriedade real. Por estes motivos, tente evitar o uso de propriedades padro sem parmetro no seu cdigo Visual Basic 6.0. Ao invs de escrever: Dim obj As Object Set obj = Me.Text1 MsgBox obj 'RUIM: Apoio em propriedade padro MsgBox Me.Text1 'RUIM: Apoio em propriedade padro use: Dim obj As Object Set obj = Me.Text1 MsgBox obj.Text MsgBox Me.Text1.Text

'BOM: Propriedade padro est resolvida 'BOM: Propriedade padro est resolvida

Embora propriedades padro sem parmetro no sejam suportadas no Visual Basic.NET, propriedades padro com parmetro so suportadas. Para entender a diferena entre os dois tipos, considere que propriedades padro com parmetro sempre possuem um ndice. Um exemplo a propriedade padro do ADO recordset: a coleo Fields. O cdigo: Dim rs As ADODB.Recordset rs("CompanyName") = "SomeCompany" rs!CompanyName = "SomeCompany"

na verdade um atalho para: Dim rs As ADODB.Recordset rs.Fields("CompanyName").Value = "SomeCompany" rs.Fields!CompanyName.Value = "SomeCompany" Neste caso, a propriedade Fields possui parmetro, e portanto seu uso vlido no Visual Basic.NET; entretanto, a propriedade padro da propriedade Fields, Value, no possui parmetro, ento o uso correto no Visual Basic.NET : Dim rs As ADODB.Recordset rs("CompanyName").Value = "SomeCompany" rs!CompanyName.Value = "SomeCompany" Este exemplo e a maior parte das outras propriedades padro so resolvidos para voc quando o projeto atualizado, portanto resolv-los no Visual Basic 6.0 simplesmente uma boa prtica de programao. Entretanto, voc deve evitar usar propriedades padro com os tipos de dados Object e Variant, pois eles no podem ser resolvidos e voc mesmo ter que corrigir o cdigo no projeto atualizado.

Use Comparaes Booleanas com AND/OR/NOT


As palavras chave And e Or funcionam de forma diferente no Visual Basic.NET e no Visual Basic 6.0. No Visual Basic 6.0, a palavra chave And efetuava um AND lgico assim como um Bitwise AND dependendo dos tipos dos operandos (devido ao fato de True ter o valor de 1). No Visual Basic.NET, AND efetua somente um AND lgico. No Visual Basic.NET, um novo conjunto de operadores foi includo na linguagem para efetuar operaes Bitwise: BitAnd, BitOr, BitNot e BitXor. O exemplo seguinte demonstra o efeito desta diferena: Dim a As Integer Dim b As Integer Dim c As Boolean a = 1 b = 2 c = a And b MsgBox ("A resposta " & c) Quando este cdigo executado no Visual Basic 6.0, a resposta False (Bitwise AND); entretanto, no Visual Basic.NET, a resposta True (AND lgico). Para garantir que seu cdigo se comporte da mesma maneira aps a atualizao, o Visual Basic.NET inclui as funes de compatibilidade VB6.And, VB6.Or e VB6.Not, que avaliam AND/OR/NOT da mesma forma que o Visual Basic 6.0 (escolhendo lgica ou Bitwise dependendo dos operandos). Quando o cdigo acima atualizado, o resultado ser parecido com o seguinte: Dim a As Short Dim b As Short Dim c As Boolean a = 1 b = 2 c = VB6.And(a, b) MsgBox ("A resposta " & c) O cdigo atualizado ir produzir a resposta False, da mesma forma que o cdigo original no Visual Basic 6.0. Para evitar que seu cdigo seja atualizado para as funes de compatibilidade, tente garantir que seus comandos AND/OR/NOT utilizam comparaes Booleanas. Por exemplo, se o exemplo acima modificado para:

Dim a As Integer Dim b As Integer Dim c As Boolean a = 1 b = 2 c = a <> 0 And b <> 0 MsgBox ("A resposta " & c) ento aps a atualizao do projeto, o cdigo resultante ser mais familiar: Dim a As Short Dim b As Short Dim c As Boolean a = 1 b = 2 c = a <> 0 And b <> 0 MsgBox ("A resposta " & c) A diferena que cada operador sendo comparado uma expresso Booleana, e portanto usa o AND lgico no Visual Basic 6.0. O AND lgico produz o mesmo resultado tanto no Visual Basic 6.0 quanto no Visual Basic.NET e portanto o cdigo no alterado. Isto significa que voc pode cortar e colar cdigo entre o Visual Basic.NET e o Visual Basic 6.0, e seu cdigo ser executado mais rapidamente no Visual Basic.NET pois ele est usando o operador AND nativo ao invs de uma funo de compatibilidade. O Visual Basic.NET trata funes em operaes AND/OR/NOT de forma diferente que o Visual Basic 6.0. Considere o seguinte exemplo: Dim b As Boolean b = Function1() And Function2() No Visual Basic 6.0, Function1 e Function2 so avaliados. No Visual Basic.NET, Function2 s avaliada se Function1 retorna True. Isto conhecido como curto-circuito dos operadores lgicos. Na maioria dos casos a nica diferena em tempo de execuo que a verso curto-circuitada executa mais rapidamente; entretanto, se Function2 possui efeitos colaterais, como a manipulao de um banco de dados ou uma varivel global, ento o comando ter um comportamento em tempo de execuo diferente do que no Visual Basic 6.0. Para evitar este problema, se seus comandos AND/OR/NOT contm funes, mtodos ou propriedades ento o comando atualizado para uma verso de compatibilidade que avalia as funes. O exemplo acima seria atualizado para o seguinte: Dim b As Boolean b = VB6.AND(Function1(), Function2()) Para evitar que seu cdigo seja atualizado para a verso de compatibilidade, faa as seguintes modificaes: Dim Dim Dim c = d = b = b As Boolean c As Boolean d As Boolean Function1() Function2() c And d

Tambm importante notar que no Visual Basic.NET, o valor base de True foi alterado de 1 para 1. Esta alterao foi feita para ajudar aplicaes Visual Basic a interoperar com outras linguagens .NET, e resolve finalmente uma diferena importante com o Visual C++. Devido a esta alterao, nas suas aplicaes Visual Basic 6.0, voc sempre deve usar a constante True ao invs de -1, e tipos Boolean ao invs de integers para tipos Boolean. Para ilustrar a importncia disto, considere o exemplo abaixo, que produz o resultado True no Visual Basic 6.0, e False no Visual Basic.NET:

Dim i As Integer i = True If i = -1 Then MsgBox ("True") Else MsgBox ("False") End If Entretanto, alterar este cdigo para usar Booleanos gera o resultado True tanto no Visual Basic 6.0 quanto no Visual Basic.NET, e tambm gera um cdigo mais legvel: Dim i As Boolean i = True If i = True Then MsgBox ("True") Else MsgBox ("False") End If As coisas mais importantes para lembrar e implementar provenientes deste exemplo so: Sempre use os nomes constantes True e False ao invs de seus valores base 0 e 1. Use o tipo de dados Boolean para armazenar valores Boolean.

Se voc no fizer estas duas coisas, talvez voc tenha que fazer alteraes no seu projeto aps ele ter sido atualizado para o Visual Basic.NET.

Evite Propagao de Null


Verses anteriores do Visual Basic suportavam propagao de Null. Propagao de Null suporta a premissa de que quando o null usado em uma expresso, o resultado da expresso ser ele prprio Null. Em cada caso do exemplo seguinte, o resultado de V sempre Null. Dim V = V = V = V 1 + Null Null + Right$("SomeText", 1) Right("SomeText", 0)

Propagao de Null no suportada no Visual Basic.NET. O comando 1+Null ir gerar uma m combinao de tipos no Visual Basic.NET. Alm disso, onde o Visual Basic 6.0 tinha duas verses da funo LeftLeft$ retornando um string, Left retornando uma variant que poderia ser Nullo Visual Basic.NET possui somente uma verso, Left, que sempre retorna um string. Para estar compatvel com o Visual Basic 6.0 e com o Visual Basic.NET voc deve sempre escrever cdigo que testa o Null ao invs de apoiar-se na propagao de Null. Alm disso, no Visual Basic.NET, as seguintes funes no mais retornaro Null: Chr Command CurDir Date Environ Error Hex Lcase Ltrim Mid Oct Right RTrim Space Str Time Trim UCase

Propagao de Null normalmente usada em aplicaes de banco de dados, onde voc precisa verificar se um campo de banco de dados contm Null. Nestes casos voc deve verificar resultados usando a funo IsNull() e efetuar a ao apropriada.

Use Arrays Delimitados por Zero


O Visual Basic 6.0 permitiu a voc definir arrays com limites inferiores e superiores de qualquer nmero inteiro. Voc tambm pode usar ReDim para reinstalar uma variant como um array. Para habilitar interoperabilidade com outras linguagens, arrays no Visual Basic.NET devem ter um limite inferior como zero, e o ReDim no pode ser usado a menos que a varivel tenha sido declarada anteriormente com Dim As Array. Embora isto restrinja a forma como arrays podem ser definidos, isto realmente permite a voc passar arrays entre o Visual Basic.NET e qualquer outra linguagem .NET. O exemplo seguinte mostra a restrio: Dim a(1 To 10) As Integer Dim v ReDim v(10) Dim b(10) As Integer ReDim b(5) As Integer anteriormente Dimed 'RUIM: LBound deve ser 0 'RUIM: No pode usar ReDim sem Dim 'OK: Cria um array de 10 inteiros 'OK: Pode fazer ReDim de var

Alm disso, no Visual Basic 6.0, Dim (0 to 10) As Integer criava um array de 11 inteiros, indexado de 0 to 10. O mesmo comando no Visual Basic.NET cria um array de 10 inteiros, de 0 a 9. Um efeito colateral que Option Base 0|1 foi removido da linguagem. Quando seu projeto atualizado para o Visual Basic.NET, quaisquer comandos baseados em opo so removidos do seu cdigo. Se o array limitado por zero, ele no alterado. Entretanto, se um array no limitado por zero, ento ele atualizado para uma classe wrapper array, como no exemplo seguinte: Dim a(1 To 10) As Integer alterado para: Dim a As Object = New VB6.Array(GetType(Short), 1,10) A classe wrapper array bem mais lenta que o array nativo, e h limitaes ao uso de dois tipos de array na mesma aplicao. Por exemplo, voc no pode passar um wrapper array para algumas funes com parmetros do tipo Array, e talvez voc no consiga passar um wrapper array para uma classe Visual C# ou Visual C++. Por esta razo, voc deve usar arrays delimitados por zero no seu cdigo Visual Basic 6.0, evitar usar ReDim como uma declarao de array e evitar usar Option Base 1.

Use Constantes Ao Invs de Valores Bsicos


Ao escrever cdigo, tente usar constantes ao invs de seus valores bsicos. Por exemplo, se voc est maximizando um formulrio em tempo de execuo, use: Me.WindowState = vbMaximized ao invs de: Me.WindowStyle = 2 Me.WindowStyle = X 'Ruim: Valor bsico 'Ruim: Varivel 'BOM: Nome constante

Da mesma forma, use True e False ao invs de -1 e 0. No Visual Basic.NET, os valores e em alguns casos os nomes de algumas propriedades e constantes foram alterados; por exemplo, o valor de True muda de -1 para 1. Quando seu projeto atualizado para

o Visual Basic.NET, a maior parte das constantes so alteradas automaticamente para voc; entretanto, se voc est usando valores ou variveis bsicas ao invs dos nomes das constantes, muitos casos no podem ser atualizados automaticamente. O uso de nomes de constante minimiza o nmero de modificaes que voc tem que fazer.

Arrays e Strings de Tamanho Fixo em Tipos Definidos pelo Usurio


Devido s alteraes feitas que permitem que arrays e estruturas do Visual Basic.NET sejam totalmente compatveis com outras linguagens Visual Studio.NET, strings de tamanho fixo no so mais suportados na linguagem. Na maioria dos casos isto no um problema, pois h uma classe de compatibilidade que proporciona comportamento de string de tamanho fixo, e portanto o cdigo: Dim MyFixedLengthString As String * 100 atualizado para: Dim MyFixedLengthString As New VB6.FixedLengthString(100) Entretanto, strings de tamanho fixo realmente causam um problema quando usados em estruturas (tambm conhecidas como tipos definidos pelo usurio). O problema surge pois a classe de string de tamanho fixo no criada automaticamente quando o tipo definido pelo usurio criado. Um problema adicional que arrays de tamanho fixo tambm no so criados quando o tipo definido pelo usurio criado. Quando seu cdigo atualizado, tipos definidos pelo usurio com strings ou arrays de tamanho fixo sero marcados com um comentrio avisando-o para iniciar o string ou array de tamanho fixo antes de usar o tipo definido pelo usurio. Entretanto, voc pode evitar esta modificao alterando seus tipos Visual Basic 6.0 definidos pelo usurio para usar strings ao invs de strings de tamanho fixo, e arrays no inicializados ao invs de arrays de tamanho fixo. Por exemplo: Private Type MyType MyArray(5) As Integer MyFixedString As String * 100 End Type Sub Bar() Dim MyVariable As MyType End Sub pode ser alterado para: Private Type MyType MyArray() As Integer MyFixedString As String End Type Sub Bar() Dim MyVariable As MyType ReDim MyVariable.MyArray(5) As Integer MyVariable.MyFixedString = String$(100, " ") End Sub

Evite Recursos Legados


Por terem sido removidas da linguagem, voc deve evitar usar as seguintes palavras chave: Def<type> Computed GoTo/GoSub GoSub/Return

Option Base 0|1 VarPtr, ObjPtr, StrPtr LSet

Elas so explicadas em maiores detalhes abaixo.

Def<type>
Nas verses anteriores do Visual Basic, DefBool, DefByte, DefInt, DefLng, DefCur, DefSng, DefDbl, DefDec, DefDate, DefStr, DefObj e DefVar eram usadas na seo de declaraes de um mdulo para definir um faixa de variveis como de um certo tipo. Por exemplo: DefInt A-C definia todas as variveis comeando com as letras A, B, ou C como um inteiro. Ao invs de usar comandos Def<type>, voc deve declarar variveis explicitamente.

Computed GoTo/GoSub
Comandos Computed GoTo/GoSub tm esta forma: On x GoTo 100, 200, 300 Eles no so suportados no Visual Basic.NET. No lugar deles, voc deve usar comandos If, e construes Select Case.

GoSub/Return
Comandos GoSub e Return no so suportados no Visual Basic.NET. Na maioria dos casos voc pode substitu-los por estas funes e procedimentos.

Option Base 0|1


Option Base 0|1 era usado para especificar o limite inferior padro de um array. Como mencionado anteriormente, este comando foi removido da linguagem pois o Visual Basic.NET somente suporta nativamente arrays com um limite inferior zero. Arrays com limite inferior no zero so suportados atravs de uma classe wrapper.

VarPtr, ObjPtr, StrPtr


VarPtr, VarPrtArray, VarPtrStringArray, ObjPtr e StrPtr eram funes no documentadas usadas para obter o endereo bsico de memria das variveis. Estas funes no so suportadas no Visual Basic.NET.

LSet
No Visual Basic 6.0, o comando LSet podia ser usado para atribuir uma varivel de um tipo definido pelo usurio para outra varivel de um tipo diferente definido pelo usurio. Esta funcionalidade no suportada no Visual Basic.NET.

Windows APIs
Muitas APIs podem ser usadas exatamente como no Visual Basic 6.0, lembrando que voc tem que ajustar seus tipos de dados de acordo. O tipo de dados Long do Visual Basic 6.0 agora o tipo de dados Integer do Visual Basic.NET, e o tipo de dados Integer do Visual Basic 6.0 agora o tipo de

dados Short no Visual Basic.NET. Durante a atualizao, estas alteraes so feitas para voc, e APIs simples funcionam exatamente como no Visual Basic 6.0. Por exemplo: Private Declare Function GetVersion Lib "kernel32" () As Long Function GetVer() Dim Ver As Long Ver = GetVersion() MsgBox ("System Version is " & Ver) End Function alterado para: Private Declare Function GetVersion Lib "kernel32" () As Integer Function GetVer() Dim Ver As Integer Ver = GetVersion() MsgBox("System Version is " & Ver) End Function Alm das atualizaes dos tipos de dados numricos, o Visual Basic 6.0 tinha um tipo de dados de string de tamanho fixo que no suportado no Visual Basic.NET, e que atualizado para uma classe wrapper string de tamanho fixo. Em muitos casos no Visual Basic 6.0 voc pode efetuar a mesma ao usando um string normal. Por exemplo: Private Declare Function GetUserName Lib "advapi32.dll" Alias _ "GetUserNameA" (ByVal lpBuffer As String, ByRef nSize As Long) As Long Function GetUser() Dim Ret As Long Dim UserName As String Dim Buffer As String * 25 Ret = GetUserName(Buffer, 25) UserName = Left$(Buffer, InStr(Buffer, Chr(0)) - 1) MsgBox (UserName) End Function pode ser melhor escrito usando-se um string normal definido explicitamente para o tamanho 25 ao invs de um string de tamanho fixo: Dim Buffer As String Buffer = String$(25, " ") Este cdigo atualizado para o Visual Basic.NET da seguinte forma: Declare Function GetUserName Lib "advapi32.dll" Alias _ "GetUserNameA" (ByVal lpBuffer As String, ByRef nSize As Integer) As Integer Function GetUser() Dim Ret As Integer Dim UserName As String Dim Buffer As String Buffer = New String(CChar(" "), 25) Ret = GetUserName(Buffer, 25) UserName = Left(Buffer, InStr(Buffer, Chr(0)) - 1) MsgBox(UserName) End Function Em alguns casos, o Visual Basic.NET trata melhor a passagem de strings para APIs, pois voc pode declarar opcionalmente como voc quer que os strings sejam passados usando as palavras chave ANSI e UNICODE.

H trs casos onde voc precisa fazer algumas alteraes. O primeiro a passagem de tipos definidos pelo usurio que contm strings de tamanho fixo ou byte arrays para APIs. No Visual Basic.NET talvez voc tenha que alterar seu cdigo, incluindo o atributo MarshallAs (a partir do System.Runtime.InteropServices) para cada string de tamanho fixo ou byte array no tipo definido pelo usurio. O segundo caso o uso do tipo de varivel As Any em um comando Declare. Isto no suportado no Visual Basic.NET. Variveis do tipo As Any sempre foram usadas para passar uma varivel do tipo string ou Null; voc pode substituir este uso no Visual Basic 6.0 declarando duas formas da API, uma com longs, uma com strings. Por exemplo, a API GetPrivateProfileString API tem um parmetro lpKeyName do tipo As Any: Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long Voc pode remover o As Any substituindo o Declare por duas verses; uma que aceita um long, e uma que aceita um string: Private Declare Function GetPrivateProfileStringKey Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long Private Declare Function GetPrivateProfileStringNullKey Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Long, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long Quando voc quer passar o valor Null para a API, voc usa a verso GetPrivateProfileStringNullKey. Desta forma a funo pode ser atualizada para o Visual Basic.NET. A ltima rea onde voc pode ter que fazer algumas alteraes se voc estiver usando APIs que efetuam criao de thread, Windows subclassing, message queue hooking, e assim por diante. Algumas destas funes causaro um erro de run-time no Visual Basic.NET. Muitas destas APIs possuem equivalentes no Visual Basic.NET ou no .NET Framework. Voc ter que corrigir estas situaes caso a caso.

Consideraes para Formulrios e Controles


O Visual Basic.NET possui um novo pacote de formulrios, o Windows Forms. Windows Forms amplamente compatvel com o pacote de formulrios encontrado no Visual Basic 6; entretanto, h algumas diferenas importantes descritas abaixo: Windows Forms no suporta o controle de OLE container; voc deve evitar o uso deste controle nas suas aplicaes Visual Basic 6.0. No h controle de figuras no Windows Forms. Figuras quadradas e retangulares sero atualizadas para labels, e figuras ovais e crculos no podem ser atualizados. Voc deve evitar o uso destas figuras nas suas aplicaes. No h controle de linha no Windows Forms. Linhas horizontais e verticais so atualizadas para labels. Linhas diagonais no so atualizadas, e voc deve evitar seu uso.

Windows Forms possui um novo conjunto de comandos grficos que substituem os mtodos Form Circle, CLS, PSet, Line e Point. Como o novo modelo de objeto muito diferente do anterior no Visual Basic 6.0, estes mtodos no podem ser atualizados. Para o controle de Timer, a definio da propriedade Interval como 0 no desabilita o timer; ao invs disto o intervalo redefinido como 1. Nos seus projetos Visual Basic 6.0, voc deve configurar Enabled para False ao invs de definir o Interval para 0. Windows Forms possui dois controles de menu, MainMenu e ContextMenu, sendo que o Visual Basic 6.0 possui apenas um controle de menu, Menu, que pode ser aberto como um MainMenu ou um ContextMenu. Controles de menu so atualizados para controles MainMenu, mas voc no poder us-los como ContextMenus; voc ter que recriar seus ContextMenus. Windows Forms no possui suporte para Dynamic Data Exchange (DDE). Windows Forms no suporta o mtodo Form.PrintForm. Embora Windows Forms tenha suporte para a funcionalidade drag-and-drop, o modelo de objeto muito diferente do usado no Visual Basic 6.0. Dessa forma, as propriedades e mtodos drag-and-drop do Visual Basic 6.0 no podem ser atualizados. O framework .NET possui um objeto Clipboard aprimorado (System.WinForms.Clipboard) que oferece mais funcionalidade e suporta mais formatos clipboard do que o objeto Clipboard do Visual Basic 6.0. Entretanto, devido s diferenas nos modelos de objeto, comandos clipboard no podem ser atualizados automaticamente. Windows Forms no suporta a propriedade Name para formulrios e controles em tempo de execuo; dessa forma voc no deve escrever cdigo que repete a coleo Controls procurando um controle com um certo nome (esta funcionalidade agora est disponvel usando-se as classes .NET System.Reflection.) Para garantir que seus formulrios sejam atualizados para o tamanho certo, voc deve sempre usar o ScaleMode padro de twips nas suas aplicaes. Durante a atualizao, o Visual Basic.NET transforma suas coordenadas de formulrios de twips para pixels.

2000 Microsoft Corporation. Todos os direitos reservados. Termos de uso.

Você também pode gostar