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

Published Wed, Jan 4 2006 11:53 | Alberto Silva

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.

 

Comments

# Denny said on April 16, 2007 1:43 PM:

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

# denny said on April 16, 2007 2:40 PM:

meu e-mail é dennysee_18@hotmail.com

Search

This Blog

Tags

Community

Archives

News

  • Você escolheu um software de gestão que se adapta ao seu negócio... Porque há-de deixar que lhe imponham uma solução de mobilidade para as suas forças de venda? Contacte a moving2u e teremos todo o prazer em lhe apresentar as nossas soluções!


    Grab this badge here!

Eventos

Desenvolvimento .net CF

Mobilidade em Português...

Sobre mim...

Syndication

Email Notifications