|
|
|
|
|
|
Problema com evento Validating, CausesValidation e fechar do formulário
Wednesday, September 21, 2005 1:24 AM
(Also in english: Problem of Validating, CausesValidation and Form Close)
Lecionando numa turma de um curso oficial da Microsoft, estava demonstrando o uso do evento Validating de uma caixa de texto e um botão com a propriedade CausesValidation com valor false (existe uma questão de certificação discutindo esta questão), e escrevi um código simples: Private Sub btnCancela_Click(...) Handles btnCancela.Click
MessageBox.Show("Cancela pressionado")
End Sub
Funcionou, como esperado, e para finalizar a demonstração, troquei o código para: Private Sub btnCancela_Click(...) Handles btnCancela.Click
Me.Close()
End Sub
Esqueci que tinha tido este problema quando programava uma aplicação Windows Form algum tempo atrás. Na época, simplesmente decidi não usar o evento Validating e coloquei todo meu código de validação no botão OK. Mas agora eu estava demonstrando isto para os estudantes e não podia admitir que isto é algo que tínhamos de aceitar.
Portanto, com alguma busca na Internet, um pequeno código a algumas alterações, apresento minha solução para este problema.
Primeiro, declare uma constante privada no formulário: Private Const WM_CLOSE As Integer = CInt(&H10)
Em seguida, sobrescreva o método WndProc: Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
If m.Msg = WM_CLOSE Then
Dim controle As Control
For Each controle In Me.Controls
controle.CausesValidation = False
Next
End If
MyBase.WndProc(m)
End Sub
E é só isto. O botão Cancela pode ser pressionado e o método Close irá executar sem ser interrompido pela validação.
Boa sorte.
Pedro de Oliveira MCT (MCSD .NET/VS6) Rio de Janeiro/Brasil
Para mais informações: MCAD/MCSD: Error Handling for the User Interface
Se você usa Oracle e .NET, cuidado com a ordem dos parâmetros
Tuesday, September 06, 2005 12:55 AM
Um erro comum ao utilizar o Oracle numa aplicação .NET é declarar os parâmetros fora da ordem na qual foram declarados.
Por exemplo, considere a seguinte consulta parametrizada:
SELECT NOME, IDADE FROM FUNCIONARIO WHERE NOME = :p_nome AND IDADE = :p_idade
Os parâmetros de entrada p_nome e p_idade poderiam ser declarados na ordem seguinte:
cmd.Parameters.Add("p_idade", OracleType.Int32).Value = 18 cmd.Parameters.Add("p_nome", OracleType.VarChar, 80).Value = "Pedro"
Contudo, este código teria como resultado um erro, porque como p_nome foi declarado no SQL antes de p_idade, o Oracle considera que o valor 18 está sendo passado para o primeiro parâmetro (p_nome) e o valor "Pedro" para o segundo parâmetro (p_idade). Como "Pedro" não pode ser convertido para inteiro, ocorre o erro.
Para corrigir este código, bastaria seguir a mesma ordem do SQL, declarando os parâmetros desta forma:
cmd.Parameters.Add("p_nome", OracleType.VarChar, 80).Value = "Pedro" cmd.Parameters.Add("p_idade", OracleType.Int32).Value = 18
Este errinho pode causar sérios problemas se os parâmetros não forem de tipos incompatíveis, pois informações invertidas poderiam ser armazenadas, ocasionando inconsistência de dados.
Portanto, ao usar parâmetros e Oracle, cuidado com a ordem dos parâmetros.
Boa programação.
Pedro Carlos S. de Oliveira MCT (MCSD .NET/VS6) Rio de Janeiro/Brasil
Diferenças entre Session e ViewState
Thursday, September 01, 2005 10:45 PM
Li num blog uma dúvida sobre a diferença entre Session vs ViewState e, em resumo, vou tentar mostrar o que são e quais são as diferenças entre estes recursos de manutenção de estado.
O Session é o mais conhecido, pois existe desde o ASP. Este é um objeto que armazena pares do tipo chave/valor. Chave é um nome (string) de acesso e o valor é qualquer objeto (Object). O armazenamento destes pares é feito no servidor e, na sua forma padrão (default), consome memória. O Session é um objeto individual, i.e., associado a apenas um usuário usando a aplicação web. Sendo individual e consumindo memória, este objeto torna-se perigoso para a escalabilidade da aplicação web, i.e., o suporte ao crescimento no número de usuários (que causará um aumento no consumo de memória no servidor).
O ViewState é um objeto que foi inserido no ASP.NET, junto com os recursos de manutenção de estado do WebForm (página ASPX). Este objeto também armazena pares do tipo chave/valor, contudo diferente do Session, o valor não pode ser um objeto (pelo menos, em seu estado original). Apenas tipos simples (números e strings) podem ser armazenados. Objetos serializáveis também podem ser armazenados em ViewState, mas apenas porque ao ser serializado o objeto é transformado em XML, que é uma string. O ViewState também é um objeto individual, mas diferente do Session não consome recursos (memória ou outro) no servidor. O conteúdo é acrescentado à página gerada num campo hidden do WebForm ( __VIEWSTATE ), encriptado e num formato compacto. Isto faz com que a escalabilidade não seja prejudicada, mas o tamanho da página gerada fica maior, o que aumenta o tempo de carga da página. Em conexões lentas, isto pode ser um problema.
Acredito que com estas informações fica mais fácil entender as diferenças entre estes objetos.
Boa programação.
Pedro Carlos S. de Oliveira MCT (MCSD .NET/VS6) Rio de Janeiro/Brasil
Webservice para consulta de CEP (Brasil)
Wednesday, August 31, 2005 10:11 PM
Usando a página dos Correios para consultar o CEP de um endereço, notei no fim da página de resultados da busca um anúncio que oferecia a possibilidade de consultar o CEP no Microsoft Office 2003. Como era um anúncio da própria empresa de Correios, resolvi testar e, como esperado, consegui usar a partir do Office.
A surpresa veio quando notei que este recurso usado Office era na verdade um Webservice criado em .NET (extensão .aspx). Comentei isto em sala de aula e um aluno, Thiago Fialho, se interessou e, com algum trabalho e pesquisa, dissecou o funcionamento deste Webservice e seus resultados estão em seu blog do TheSpoke: http://thespoke.net/blogs/thiagocf/archive/2005/08/31/353202.aspx.
Vale a pena conferir e usar em suas aplicações .NET.
Globalization para português do Brasil (pt-BR) - Parte 2
Monday, August 22, 2005 2:09 PM
Continuando o assunto de configurações regionais do Brasil, vou mostrar outras formas de aplicar formatos regionais, independente do sistema do servidor (ou do usuário). Em ASP.NET, caso fosse necessário aplicar a regionalização para português do Brasil em apenas uma página, poderíamos usar a diretiva Page: <%@ Page UICulture="pt-BR" Culture="pt-BR"...%> E, independente de ser uma aplicação ASP.NET, podemos usar os namespaces System.Globalization e System.Threading: ' Visual Basic ' Importar estes namespaces no início do código. Imports System.Globalization Imports System.Threading ' No código: Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("pt-BR") Thread.CurrentThread.CurrentUICulture = New CultureInfo("pt-BR") // C# // Importar estes namespaces no início do código. using System.Globalization; using System.Threading; // No código: Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("pt-BR"); Thread.CurrentThread.CurrentUICulture = new CultureInfo("pt-BR"); Culture determina a cultura usada em funções dependentes da cultura como Date e Currency. Portanto, é usada na formatação de datas e números. UICulture determina a linguagem que será usada na carga de arquivos de recursos. Recursos
Arquivos de recursos (resources) são usados para armazenar dados embutidos como strings ou imagens, que podem ser recuperados durante a execução e mostrados na tela. O Resource Management é um recurso do framework .NET usado para extrair elementos do código e armazená-los com chaves em arquivos de recursos. Na execução, a classe ResourceManager é usada para, baseado na chave, recuperar o item baseado na cultura correta. Recursos podem ser armazenados como arquivos independentes ou como parte do assembly. ResourceWriter e resgen.exe podem ser usados para criar arquivos .resources. Para incluir arquivos .resources dentro de um assembly, use a opção de compilação relacionada ou Al.exe. Para criar um arquivo texto de recursos:
- resource.en-US.txt
Msg = User name
- resource.pt-BR.txt
Msg = Usuário
Para gerar o arquivo .resources, inicie o Command Prompt do Visual Studio .Net e use o executável resgen:
resgen resource.en-US.txt resgen resource.pt-BR.txt
Estes comandos irão gerar o arquivo .resources. Numa página ASP.NET de teste: ' Visual Basic Dim cultura As String = Request.Form("cultura") Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(cultura) Thread.CurrentThread.CurrentUICulture = New CultureInfo(cultura) Dim rm As ResourceManager = ResourceManager.CreateFileBasedResourceManager ("resource", Server.MapPath("resources") & Path.DirectorySeparatorChar, Nothing) Response.Write( rm.GetString("Msg")) // C# string cultura = Request.Form("cultura"); Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(cultura); Thread.CurrentThread.CurrentUICulture = new CultureInfo(cultura); ResourceManager rm = ResourceManager.CreateFileBasedResourceManager ("resource", Server.MapPath("resources") + Path.DirectorySeparatorChar, null); Response.Write( rm.GetString("Msg")); O código irá mostrar o conteúdo baseado no valor de uma entrada chamada "cultura". Caso você esteja usando ASP.NET e necessite de um framework de localização mais robusto, pode usar o Enterprise Localization Toolkit: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspp/html/entloctoolkit.asp Boa programação.
Publicação via FTP no VS .NET 2003
Monday, August 22, 2005 1:58 PM
Para quem já precisou publicar via FTP os arquivos que desenvolveu no Visual Studio .NET 2003, sabe que esta é uma tarefa ingrata (ou pelo menos trabalhosa). Não existe recurso nativo e usar um programa externo é pouco prático, principalmente para quem tem pouca experiência (selecionar os arquivos que devem ser distribuídos, atualizar apenas o que foi alterado, ...).
É aí que entra uma aplicação (que também tem uma add-in para o VS.NET) super interessante que facilita muito o trabalho de publicação via FTP: Unleash It. Ela é gratuita e está disponível em http://www.eworldui.net/unleashit/.
Sua configuração poderia ser mais intuitiva, mas uma vez gravados os dados do servidor de destino, seu uso se restringe a pressionar um botão.
OK, para você já está usando o Visual Studio 2005 esta dica não é útil, mas acredito que muitos ainda irão usar o VS.NET 2003 durante algum tempo e, para vocês que se encontram neste caso, esta é uma ferramenta quase indispensável (se você não usa FTP...).
Globalization para português do Brasil (pt-BR) - Parte 1
Monday, August 22, 2005 1:56 PM
Muitas vezes precisamos que nosso código use as configurações regionais do Brasil, i.e., o formato de data e hora seja dia/mês/ano, a moeda seja o Real (R$), etc.
A personalização das configurações associadas a uma região é um dos recursos de Globalization do .NET e é usando diferentes recursos do globalization que podemos customizar as configurações para o formato regional do Brasil.
Se você está desenvolvendo em ASP .NET, o local ideal para aplicar a configuração é no arquivo Web.config da pasta raiz (root) do site. O elemento configura a globalização da aplicação Web:
<configuration> <system.web> <globalization>
Através de seus atributos, podemos aplicar o encoding que será usado e as informações de cultura (culture). O encoding define o conjunto de caracteres que será usado e a cultura afeta o formato usado nas datas/horas, moeda, casas decimais, entre outros.
A configuração no Web.config deve ficar assim:
<globalization fileEncoding="iso-8859-15" requestEncoding="iso-8859-15" responseEncoding="iso-8859-15" culture="pt-BR" uiCulture="pt-BR" />
Apesar de, superficialmente, não parecer que seja necessário alterar o encoding, na verdade é importante alterá-lo. Em diversas situações específicas, como por exemplo ao usar acentos nas propriedades de webcontrols, caso o encoding seja mantido na configuração padrão (default), os caracteres acentuados não são apresentados corretamente. O encoding iso-8859-15 é o ISO Latin 9, que é a padronização para a Europa ocidental. O ISO Latin 9 adiciona o símbolo do Euro, letras Francesas e Filandesas faltando no Latin-1 (iso-8859-1).
O código de linguagem pt-BR é usado para indicar o português do Brasil (pt é o código para português de Portugal).
Por enquanto, vou terminar aqui. Na parte 2 deste assunto, vou mostrar como aplicar estas informações no código, afetando apenas uma função, por exemplo.
Microsoft E-Learning Courses sobre Visual Studio 2005 Gratuitos
Monday, August 22, 2005 1:50 PM
Essa é imperdível para quem deseja se manter atualizado em desenvolvimento com tecnologias .NET: a Microsoft está temporariamente oferecendo alguns de seus cursos oficiais on-line (E-Learning) sobre Visual Studio 2005 sem custo (gratuito).
- Clinic 2551: Introduction to Visual Studio Team System
- Course 2924: Building Data Components in Microsoft® Visual Studio® 2005
- Course 2925: Building Managed Code for SQL Server 2005 and Creating SOA Applications with Visual Studio 2005
- Course 2926: Building Windows® Forms Applications with Microsoft® Visual Studio® 2005
- Course 2927: Building Web Applications with ASP.NET 2.0
- Course 2928: Implementing Data Access and Security in an ASP.NET 2.0 Web Application
- Course 2929: Implementing Wizards, Site Navigation, State Management, and Configuration in ASP.NET 2.0
- Course 2930: Implementing Master Pages, Personalization, and Web Parts with ASP.NET 2.0
Cada um dos cursos tem o prazo de três meses para serem completados e, normalmente, teriam o custo de $99,00, mas por tempo limitado encontram-se liberados para inscrição sem este valor.
Inscreva-se em: https://www.microsoftelearning.com/visualstudio2005/
Bom estudo!
|
|
|
|
|
|
| | Sun | Mon | Tue | Wed | Thu | Fri | Sat |
|---|
| 26 | 27 | 28 | 29 | 30 | 31 | 1 | | 2 | 3 | 4 | 5 | 6 | 7 | 8 | | 9 | 10 | 11 | 12 | 13 | 14 | 15 | | 16 | 17 | 18 | 19 | 20 | 21 | 22 | | 23 | 24 | 25 | 26 | 27 | 28 | 29 | | 30 | 1 | 2 | 3 | 4 | 5 | 6 |
|
|
|
|
|
|
|
|
|