Como lidar com múltiplos forms em aplicações .NET Compact Framework

Um dos primeiros obstáculos que programadores de VB6 ou do eVB quando chegam ao universo .NET é a gestão de múltiplos forms, nomeadamente como passar valores entre forms e alternar entre forms.


Abaixo transcrevo 2 mensagens que enviei para o newsgroup microsoft.public.pt.pocketpc , logo que possa, tansformo num artigo:



> Saudações Pessoal
>
> Não estou conseguindo carregar mais de um formulário no CF com VB.NET.
> Alguém pode dar-me uma dica?
>
> Sabem onde poso conseguir informações sobre tratamento de formulário no
CF?
>
> Fiz várias pesquisas e em todas elas, os exemplos são de apenas um
> formulário.
>

A diferença entre a gestão de forms no eVB e no vb.net é que neste, sendo os forms ‘meros’ objectos definidos em classes, tens de instanciar os forms para poderes aceder-lhes.
O acto de instanciar consiste em carregar numa variável uma nova instância do form, sobre a qual poderás invocar métodos (.show, .hide, …) e definir propriedades.

Por ex. para te referires ao form2 a partir do form1 utilizarias algo do tipo…

Dim meuForm2 as form2 = new form2()
meuForm2.label1.text = “Olá mundo!’

Repara que passas a referir-te ao form2 não pelo seu nome, mas pelo da variável que o instanciou.

Esta nova abordagem tem muitas vantagens, como por ex. a partir de um mesmo form teres várias instâncias independentes do mesmo em memória, mas também pode criar confusão, pois se, por ex. a partir do form2 chamasses um form3 e depois pretendesses que o controlo do programa voltasse ao form2 que tinha sido carregado em memória, não poderias voltar a criar uma instância do form2, pois ela seria independente daquela pela qual o utilizador tinha passado. Eu nestes casos sugiro que os forms sejam carregados em variáveis globais, e que aquando da sua utilização se verifique se já foram instanciados, ou não, e se for caso disso, instanciá-los.

Os seguintes links são muito úteis nesta questão:

Moving from Embedded Visual Basic to Visual Basic .NET
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnppc2k3/html/fromemb.asp

Migrating eVB Forms to Visual Basic .NET
http://msdn.microsoft.com/mobility/default.aspx?pull=/library/en-us/dnppcgen/html/migrating_evb_forms.asp

Creating a Multiple Form Application Framework for the Microsoft .NET
Compact Framework
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnnetcomp/html/netcfuiframework.asp

 


> Saudações Pessoal
>
> Estou enfrentando alguns problemas quando tenho que navegar entre vários
> formulários.
>
> São 13 formulários (frmTAB01 até frmTAB13) os quais tenho que avançar ou
> retrocedor entre eles.
>
> Ocorre que não estou conseguindo “reter” os dados já digitados. Se digito
> algo em frmTAB01 e em seguida chamo o frmTAB02, quando eu volto para o
>
> frmTAB01 perco tudo.
>
> Alguém tem sugestões de como posso trabalhar com esta qtde. de formulários
> de forma que as informações já inseridas, sejam preservadas?
>
> Obrigado

 

Uma das maiores diferenças entre o VB.net e o eVB, é a questão como os forms são geridos: enquanto no eVB um form é instanciado quando é carregado, e é  referenciado pelo próprio nome, no VB.net os forms têm de ser explicitamente instanciados em variáveis que tenham uma abrangência (scope) de acordo com as necessidades.

O que significa isto aplicado a teu caso? Significa que os dados estão a ser retidos na variável que tinha sido instanciada… a razão pela qual não deves testar a conseguir ver os valores é que quando mudas de forma para um anterior, em vez de reutilizar uma variável global que contém a instância do form com os dados, deves estar a criar uma nova instância.

Uma sugestão pode ser por exemplo criares 13 variáveis, declarando cada uma delas com um form específico:

dim gfrmTab1 as frmTAB1
dim gfrmTab2 as frmTAB2

dim gfrmTab13 as frmTAB13

Depois em cada form, por ex. no frmTAB5…
- quando o utilizador quer retroceder, fazes
    gfrmTAB4.Show
    Me.Hide
- quando o utilizador quer avançar, é preciso ver se a variável já foi
iniciada ou não:
    if isnothing(frmTab6) then
        gfrmTab6 = new frmTab6
    end if
    gfrmTab6.Show

A mesma lógica deve ser aplicada aos restantes forms.

 

2 thoughts on “Como lidar com múltiplos forms em aplicações .NET Compact Framework”

  1. olá, li todo este “artigo” sobre forms e gostaria de tirar uma duvidas com vc . Estou começando a programar em ASP.NET e estou enfrentando algumas dificuldades com forms pois ao clicar num botão para exibir um data gridview aparece a mensagem de erro dizendo o datagridview precisa estar dentro de um form runat=”server” mas ao inserir o form com runat server e rodar a mesma pagina exibi-se outro erro dizendo que em uma pagina não é possivel existir dois forms…tentei criar o form como variavel como foi ensinado aqui mas não consigo instanciar o form2… por favor me ajude…

    grata

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>