P>

capa_NET39_G.gif

Clique aqui para ler todos os artigos desta edição

Boa Idéia

Reutilização de interfaces com Inherited Forms e Master Pages

 

Este artigo discute

Este artigo usa as seguintes tecnologias

·       Herança Visual no Windows Forms;

·       Master Pages;

·       DataSet tipado;

·       EventHandlers.

Visual Studio 2005, ASP.NET 2.0, ASP.NET Ajax, Windows Forms e C#.

 

Sabe aqueles sistemas que possuem dezenas de telas de cadastro? Onde todas as telas possuem características semelhantes? Antes de iniciar o desenvolvimento de sistemas desse tipo é comum criarmos algum artifício para a reutilização das interfaces, como templates.

Isso ajuda a reduzir o tempo de desenvolvimento do sistema e também garante a padronização das telas. Veremos neste artigo o que o .NET oferece para a criação desses “templates”, tanto para aplicações Windows Forms quanto para aplicações Web.

Northwind

Para os exemplos vamos precisar de um banco, assim poderemos conferir nossas telas em um ambiente real. Para não desenvolvermos um novo banco, vamos utilizar o famoso Northwind que a Microsoft disponibiliza para testes. Neste artigo utilizaremos o Northwind em um SQL Server 2005.

 

Onde encontrar o Northwind?

A Microsoft disponibiliza o download do Northwind para SQL Server, no endereço:

www.microsoft.com/downloads/details.aspx?FamilyID=06616212-0356-46A0-8DA2-EEBC53A68034&displaylang=en

Nova solução

Como neste artigo veremos exemplos tanto em Windows Forms como em ASP.NET, vamos criar uma solução vazia no Visual Studio 2005, onde poderemos incluir os projetos necessários. Abra o seu Visual Studio 2005 e acesse o menu File>New>Project.

Na janela que abrir, como mostra a Figura 1, selecione o item Other Project Types>Visual Studio Solutions, marque o template Blank Solution, informe “TelaBase” em Name e clique em OK. Nessa solução, no decorrer do artigo, criaremos os projetos necessários para a implementação dos exemplos.

 

image004.jpg 

Figura 1. Criando uma nova solução vazia

DataSets Tipados e TableAdapters

Para quem ainda não conhece, o ADO.NET na versão 2.0, possui um novo recurso chamado TableAdapter. Um TableAdapter é gerado junto com um DataTable quando criamos um DataSet Tipado. Utilizaremos um DataSet Tipado com TableAdapter, pois com esses recursos não precisaremos criar nenhuma rotina de acesso e persistência de dados no banco, o TableAdapter será criado com essas rotinas para nós.

Vamos começar criando um projeto Class Library onde modelaremos o DataSet. Clique com o botão direito sobre a Solution e escolha a opção Add>New Project. No item Visual C#, escolha o template Windows>Class Library e informe “TelaBaseLibrary” em Name. Para finalizar, clique em OK.

Ainda no Solution Explorer clique com o botão direito sobre o projeto que acabamos de criar e escolha a opção Add>New Item. Escolha o template DataSet, informe “Northwind” em Name e clique em Add.

Crie uma nova conexão com o Northwind no Server Explorer. Expanda essa conexão até visualizar as tabelas do banco, e em seguida arraste para o DataSet a tabela Shippers. Veja na Figura 2 como deve ficar seu DataSet.

 

image006.jpg 

Figura 2. DataTable Shippers e TableAdapter ShippersTableAdapter

Escolhemos a tabela Shippers por ser uma tabela bem simples e servirá perfeitamente para realizarmos nossos exemplos. Com a criação desse DataSet já temos todas as classes de acesso e persistência de dados que necessitamos. Clique com o botão direito sobre o projeto ClassLibrary e compile-o escolhendo a opção Build.

Herança de formulários

Como sabemos qualquer linguagem Orientada a Objetos permite a herança de classes, mas indo um pouco mais além, o .NET possui uma funcionalidade muito interessante para aplicações feitas para Windows, a chamada Herança de Formulários. Herdar um formulário no .NET não consiste apenas em herdar seus métodos, propriedades etc., nos formulários também temos a herança visual.

Na prática teremos uma visão melhor do que é isso. Vamos começar criando um projeto Windows Application. No Solution Explorer, clique com o botão direito sobre a solução e escolha a opção Add>New Project. No item Visual C#, escolha o template Windows>Windows Application, informe “TelaBaseWindows” em Name e clique em OK.

Veja que o projeto foi criado e temos um formulário chamado Form1.cs. Vamos apenas fechá-lo. Em seguida clique com o botão direito sobre o projeto e escolha a opção Add>Windows Form. Informe “CadastroBase.cs” em Name e clique em Add. Agora temos um formulário criado com um nome da nossa escolha. Vamos desenhar sua interface como mostra a Figura 3.

 

image008.jpg

Figura 3. Interface do formulário CadastroBase.cs

Observe que essa é uma interface bem simples, onde utilizamos apenas controles usados em formulários Windows. Veja que temos uma legenda com as principais propriedades utilizadas em cada um dos controles.

Podemos dizer que essa é uma interface absolutamente genérica, ou seja, pode ser reaproveitada para qualquer tipo de cadastro onde precisamos disponibilizar funcionalidades como: inclusão, alteração, exclusão e movimentação de registros de uma tabela.

Nesse momento devemos compilar o projeto Windows Application, basta clicar com o botão direito sobre o projeto e escolher a opção Build. Apenas com isso já podemos ver na prática como funciona a herança de formulários.

No Solution Explorer, clique novamente com o botão direito sobre o projeto e escolha a opção Add>New Item. Selecione o item Inherited Form, informe “FormShippers.cs” em Name e clique em Add (Figura 4). Assim que clicamos em Add, uma nova janela é aberta (Figura 5).

 

image010.jpg

Figura 4. Criando um novo Inherited Form

 

image012.jpg

Figura 5. Escolhendo de qual formulário o novo formulário herdará

Nessa janela temos que selecionar de qual formulário herdaremos. Veja que estão aparecendo os dois formulários que temos no projeto, vamos selecionar o CadastroBase e clicar em OK. Note que o formulário é criado com o mesmo layout do CadastroBase, isso é o que chamamos de herança visual.

Modifiers

Agora, tente mudar a propriedade Text do lblTitulo para “Shippers”. Ué, porque todas as propriedades do controle estão desativadas? Na verdade, as propriedades e eventos de todos os controles herdados estão como read-only (somente-leitura). Isso deve-se a uma das regras mais básicas da herança na Orientação a Objetos, os atributos de visibilidade.

Volte ao formulário CadastroBase, clique no lblTitulo e vá até as suas propriedades. Procure pela propriedade Modifiers e veja que ela está como private. O Modifier é a propriedade de um controle que define sua visibilidade em relação aos formulários que herdarão suas características.

Exatamente como funciona em uma classe, quando definimos um método como private, as classes que herdarão, não terão acesso a esse método. No caso dos formulários, você não conseguirá alterar as propriedades de um controle que foi definido como private.

Nota: Na POO, o modificador private indica que um membro só pode ser acessado dentro da própria classe em que foi definido.

Vamos mudar essa propriedade do lblTitulo e de todos os outros controles do formulário para Protected, e em seguida faça um Rebuild no projeto Windows Application. Volte ao formulário FormShippers e veja que agora podemos configurar as propriedades do Label do lblTitulo, e portanto podemos mudar o seu Text para “Shippers”.

Nota: Na POO, o modificador protected indica que um membro só pode ser acessado dentro da própria classe em que foi definido e em classes descendentes.

Agora, para que possamos testar na prática o funcionamento desse formulário, vamos incluir o restante dos controles necessários, como mostra a Figura 6.

 

image014.jpg

Figura 6. Formulário FormShippers.cs já com os controles para exibição dos dados

Add Reference

Veja que apenas foram incluidos três TextBoxes e três Labels. Agora precisamos codificar as ações que o formulário realizará. Para isso, precisamos adicionar uma referência no projeto Windows Application, para que possamos utilizar o DataSet e o TableAdapter que criamos anteriormente.

Clique com o botão direito sobre o TelaBaseWindows e escolha a opção Add Reference. Como mostra a Figura 7, clique na aba Project, selecione o projeto TelaBaseLibrary e clique em Add.

 

image016.jpg

Figura 7. Adicionando referência ao Projeto TelaBaseLibrary

Usando DataSet e TableAdapter

Dê uma olhada na Listagem 1. Aqui temos todo o código necessário para que o formulário exiba e edite os dados da tabela Shippers, usando é claro o DataSet Tipado e o seu respectivo TableAdapter.

Codifique sua classe exatamente assim, lembrando de dar um duplo clique em cada um dos botões antes de codificar seu evento Click.

 

...

Quer ler esse conteúdo completo? Tenha acesso completo