![]() |
||||||||
|
|
||||||||
|
| ||||||||


| com exemplos em VB |
| Componente para deixar forms em Vb semelhantes às telas do winnamp |
| Componente para colocar sua aplicação VB no Systray |
| Componente para transformar sua aplicação VB em serviço |
| Ferramentas úteis para quem usa Olap Server |
| |

|
||||||||
Pesquisa personalizada
Truques com segurança e herança em formulários Windows A orientação a objetos, que agora temos por completo no ambiente do .NET, nos traz muitas possibilidades de criação de bibliotecas que muito nos ajudarão no trabalho com .NET. Vamos ver um exemplo disso neste artigo, criando uma biblioteca com um fomulário que possa servir de base para outros formulários de nossa aplicação, agregando mais valor aos formulários. Em nosso formulário base vamos inserir os seguintes recursos :
Então vamos lá, vamos começar. Vamos começar criando um projeto de Windows Application e um projeto de Class Library dentro de uma mesma solução. Vamos trocar o nome da Class Library para libBase. Na libBase, vamos eliminar a classe que normalmente acompanha as class librarys e vamos adicionar um formulário. Vamos também adicionar um módulo. A coleção que vamos criar, Forms, deverá ser pública, para que seja facilmente acessível em qualquer parte da aplicação. Então vamos cria-la dentro do módulo. Veja como fica :
Vamos dar o nome ao nosso form base de frmBase. Precisaremos que este form se adicione automaticamente na coleção quando ele for criado e se retire automaticamente da coleção quando for fechado. Não devemos usar diretamente os eventos do form, pois isso prejudicará quem for criar forms herdados posteriormente. Prevendo situações como essa os componentes do .NET possuem métodos criados especialmente para serem sobrescritos em um processo de herança. Para cada evento do componente existe um método equivalente, apenas adicionando "On" a frente. Por exemplo, para o evento Load temos o método "OnLoad" e para o evento "Closed" temos o método "OnClosed". Os métodos ocorrem imediatamente antes do evento e são os responsáveis por disparar os respectivos eventos. Veja como ficaria o método OnLoad :
Já o OnClosed é mais complexo devido a necessidade de remover o form da coleção. Para remove-lo precisamos saber o índice dele na coleção. Então a forma mais simples de fazer isso é na verdade guardarmos esse índice a partir do método "OnLoad". Veja como fica :
Observe a chamada do MyBase em ambos os métodos. Estamos substituindo o método original. O método original é o responsável por disparar os respectivos eventos (Load, Closed). Se não chamassemos o MyBase, os eventos não mais funcionariam. Pronto, nosso form já consegue se adicionar e remover da coleção, 1a etapa cumprida. Vamos agora fazer a identificação do usuário windows. Como citei anteriormente, podemos criar uma propriedade para determinar se quem está usando este form deseja isso ou não. Para podermos documentar as propriedades criadas, vamos adicionar um Imports a mais ao arquivo :
Eis então a nova propriedade :
O atributo Description será exibido na janela de propriedades, quando o usuário visualizar esta propriedade. O usuário do Windows que será obtido é identificado como sendo um objeto do tipo WindowsPrincipal (System.Security.Principal.WindowsPrincipal) . Precisaremos de uma propriedade para que os usuários deste form possam acessar esse objeto, e precisará ser uma propriedade readOnly. Veja como fica :
Observe o atributo Browsable, nesta propriedade. Este atributo indica que a propriedade usuario não deverá ser visível na janela de propriedades do Visual Studio. Agora precisamos implementar a funcionalidade desta propriedade, recuperar a identificação do usuário. Precisaremos de dois passos para isso :
Deveremos fazer isso no momento em que o form é carregado, então mudaremos novamente o método OnLoad. Veja como fica a nova versão do OnLoad :
Pronto, temos a 2a etapa executada. Vamos então para a 3a etapa, validar os componentes para determinar quais estarão ou não acessíveis de acordo com o grupo ao qual o usuário pertence. Vamos assumir um padrão para isso. Vamos assumir que quem utilizar este form irá preencher na propriedade tag dos componentes do form o nome do grupo do Windows que terá permissão de acessar o componente. Precisaremos de 2 propriedades : - Uma propriedade para determinar se a checagem de segurança será realizada ou não Veja como ficam :
Observe que a propriedade HabilitaSeguranca, quando recebe true, habilita também a identificação do usuário. Isso porque a segurança não pode funcionar sem que a identificação do usuário esteja habilitada. Note também a utilização de um Enum para facilitar o uso da propriedade OcultaComponentes, que possui apenas 2 valores possíveis. Vamos então implementar um método que realize esta checagem de segurança. Precisaremos percorrer todos os componentes existentes no formulário para realizar esta checagem, e a checagem em si dependerá da proprieade OcultaComponentes. Veja como fica :
Observe que utilizamos a propriedade usuário e o método IsInRole. Este método pertence a objetos do tipo WindowsPrincipal. Lembrando que assumimos como padrão que a propriedade Tag esteja preenchida com o nome do grupo que tem permissão de acessar o objeto. Tomamos o cuidado de verificar se o Tag está preenchida, para os casos dos objetos que todos poderão acessar. Por fim, vamos adicionar uma chamada a este método no OnLoad e vamos ver como fica o código completo :
Observe ainda o detalhe adicional na propriedade IdentificaUsuario. Se a propriedade receber false a propriedade HabilitaSeguranca recebe também False, pois a segurança só pode ser testada se a identificação do usuário for realizada. Pronto. Temos um form Base que poderemos usar em nossas aplicações. Depois de compilar a libBase podemos testar esse form no projeto Windows Application que criamos, clicando com o botão direito e selecionando a opção "Add Inherited Form". Após darmos Ok no nome do form nos será pedido para selecionar qual o form base, então selecionamos frmBase. Uma característica interessante para se observar neste formulário é a forma como mantivemos o encapsulamento. Mesmo as propriedades internas do form não fazem acesso direto a variáveis internas (atributos), apenas acessam outras propriedades. Desta forma o código se torna de mais fácil manutenção, pois se desejarmos mudar alguma regra, teremos que aplica-la em um único local. Isso tudo é apenas o começo. Esse formulário base pode ser muito melhorado, veja : - A collection pode se tornar uma collection personalizada de forms Por isso criei um Workspace no GotDotNet e publiquei este projeto lá. Com isso todos podem analisar o código deste projeto e contribuir para a melhoria do projeto. Participem através do endereço http://workspaces.gotdotnet.com/formBase
Dennes Torres
|
||||||||
|
Veja abaixo os comentários já enviados :
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: Quer
saber mais?
Faça um curso na Búfalo Informática, Treinamento e Consultoria e Prepare-se para o Mercado! Veja o que a Búfalo tem para você. |
||||||||
� Búfalo Informática,
Treinamento e Consultoria -
Rua Álvaro Alvim, 37 Sala 920 - Cinelândia - Rio de Janeiro / RJ
Tel.: (21)2262-1368 (21) 9240-5134 (21) 9240-7281 e-Mail: contato@bufaloinfo.com.br