Gestão de forms em aplicações .NET CF (3.5)

Published Mon, Dec 15 2008 16:28 | Alberto Silva

Foi atribuída à moving2u a tarefa de 'simples' conversão de uma solução em .NET CF 1.0 para .NET CF 3.5, entre outras alterações, como suporte a diferentes resoluções e orientações de ecrã, passar a utilizar bases de daods SQL Compact localmente no PDA e suporte a impressão em impressoras portáteis A4 da HP.

Ao correr a nova aplicação nos novos equipamentos da HTC os utilizadores com frequência 'perdiam-se', pois ao invocar o 'task manager' da HTC, surgiam várias 'instâncias' activas da aplicação. Tal comportamento, completamente oposto ao que deve ser uma aplicação .NET CF bem comportada, derivava da forma como os forms eram geridos por quem desenvolveu a versão inicial.

Numa aplicação em que a navegação entre forms fosse 'explícita', ou seja, em que cada form antes de fechar-se abre sempre explicitamente outro form, assegurando-se que a cada momento há apenas um form activo, este problema não se colocaria, mas neste caso a 'retro-navegação' era implícita dado que os forms eram sempre exibidos com o método .ShowDialog() e fechado com o .Close(), a 'pilha' de forms activos era exibida no task manager.

Para contrariar esse comportamento, impõem-se algumas regras, a mais simples das quais indica que para uma instância de um form activo não constar na lista de programas em execução, deve colocar-se o respectivo título (propriedade .Text do form) a vazio. Para não ter de a cada chamada guardar o texto do título do form chamador, limpá-lo, exibir o novo form e ao fechá-lo repor o título no form chamador, criei o seguinte extenseion method:

 

    public static class FormExtensionMethods
    {
        public static System.Windows.Forms.DialogResult ExibeDialogo(this System.Windows.Forms.Form newForm, System.Windows.Forms.Form currentForm)
        {
            string s = currentForm.Text;
            currentForm.Text = "";
            System.Windows.Forms.DialogResult r = newForm.ShowDialog();
            currentForm.Text = s;
            currentForm.Show();
            currentForm.BringToFront();
            return r;
        }
    }

Deste modo, bastou-me mudar as chamadas do tipo myForm.ShowDialog() por myForm.ExibeDialogo(this) para atingir o fim desejado :)

Comments

# Application in Task Manager | keyongtech said on January 18, 2009 11:24 AM:

Pingback from  Application in Task Manager | keyongtech

Leave a Comment

Name:  
Website:
If you can't read this number refresh your screen
Enter the numbers above:  

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