Propriedade TopMost VB .NET

Em certos momentos um formulário (janela) de um programa precisa ficar a frente de todas as outras. Em outros casos essas telas precisam ficar a frente de tudo. Quando eu digo tudo, me refiro a tudo mesmo, até as janelas do Windows se necessário. Por isso mostrarei hoje a propriedade TopMost.

A propriedade TopMost, é do tipo booleana, ou seja, aceita True ou False e é utilizada nesses casos onde o formulário desejado precisa ficar a frente de tudo. Seja para chamar a atenção do usuário ou para não deixar que ele execute qualquer outra tarefa.

Continue lendo

Herança em programação Orientada a Objeto

No post de hoje, vou mostrar como é feita a herança no Visual Basic. Mas antes, uma pequena descrição a respeito de herança em programação Orientada a Objeto.

Herança é um conceito pelo qual é possível criar uma classe (subclasse) com base em uma existente. Essa nova classe herda todos os atributos, comportamentos e implementações da classe herdada (superclasse).

Diagrama mostrando a herança entre classes.

Diagrama mostrando a herança entre classes.


Continue lendo

Passo a Passo de uma Criptografia MD5

No post de hoje, mostrarei a vocês quais os passos para criptografar uma String. Além de aprender[bb] como criptografar um texto com a Criptografia MD5, vocês poderão observar o que acontece com o texto digitado a cada processo que ele passa.

Iniciando o desenvolvimento

A primeira coisa que devemos fazer, é importar as Namespace que tratam texto e que contém as classes de criptografia[bb].

Imports System.Text
Imports System.Security.Cryptography

Interface para o teste

Como você podem ver na imagem abaixo, acima de cada TextBox há uma Label explicando o que será exibido nele.

Formulário utilizado para exibir os passos da criptografia

Formulário utilizado para exibir os passos da criptografia

Código com passo a passo para a criptografia MD5

Abaixo temos o código necessário para criptografar o texto. No próprio código já estou explicando o que cada linha faz.

    Private Sub btnConverter_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConverter.Click
        ' Limpa TextBox que exibirão o Resultado
        TextBox2.Clear()
        TextBox4.Clear()
        TextBox5.Clear()

        ' Variável utilizada para gerar o primeiro Hash
        Dim Ue As New UnicodeEncoding ' Também pode ser usado o UTF8Encoding
        ' Vetor que receberá a Hash gerada pela codificação acima
        Dim ByteSourceTexto() As Byte
        ' Variável que gerará a Hash MD5
        Dim md5 As New MD5CryptoServiceProvider
        ' Vetor que receberá a Hash MD5 gerada pela variável acima
        Dim Bytehash() As Byte

        ' Gera Hash de Bytes a partir do texto digitado.
        ' ** É gerado um Vetor **!
        ByteSourceTexto = Ue.GetBytes(TextBox1.Text)

        ' For each: pega gada item do vetor gerado acima
        ' 1º Codificação. Bytes do Texto Digitado
        For Each b In ByteSourceTexto
            TextBox2.Text &= b
        Next

        ' Gera Hash de Bytes com a codificação MD5
        ' ** É gerado um Vetor! **
        Bytehash = md5.ComputeHash(ByteSourceTexto)

        ' For each: pega gada item do vetor gerado acima
        ' 2º Criptografa String acima em uma hash de byte MD5.
        For Each b In Bytehash
            TextBox4.Text &= b
        Next

        ' Último Passo:
        ' 3º Converte os Bytes para uma base String de 64 Digitos.
        ' Este último texto seria, por exemplo, gravado no banco de dados.
        TextBox5.Text = Convert.ToBase64String(Bytehash)
    End Sub

E como resultado[bb] temos o seguinte:

Resultado do passo a passo da criptografia

Resultado do passo a passo da criptografia

E por hoje é. Até uma próxima.

Bloco Using no VB .NET

Hoje vamos ver algo do Visual Basic .NET, que particularmente não vejo muito, mas é bastante interessante; o bloco Using. Esse bloco permite que seja criada uma instancia de uma classe e ao final do bloco tal instancia é retirada da memória, sem que seja necessário, por exemplo, utilizar o método .Dispose().

Declarando bloco Using

A declaração básica desse bloco:

    Using classe As New classeQualquer

    End Using

Como no exemplo, a variável chamada classe, só é válida dentro do bloco Using, ou seja, se tentar utilizá-la fora do bloco, será acusado erro por falta de declaração de variável.

Importante: a classe que será instanciada no bloco Using, DEVE implementar a interface IDisposable. Uma classe que implementa tal interface, indica que conseguem por si própria, desalocar a memória que fora separada para uma instância.

Utilizando o bloco Using

Vamos ver em um exemplo prático, como utilizar o bloco Using.

Para o exemplo a seguir, utilizarei um código responsável por ler um arquivo de texto. Isso porque utilizarei a classe TextReader que implementa a interface IDisposable.

Using reader As System.IO.TextReader = System.IO.File.OpenText("arquivo.txt")
    Dim linhaArquivo As String

    linhaArquivo = reader.ReadLine()
    Do Until linhaArquivo Is Nothing
        Console.WriteLine(linhaArquivo)
        linhaArquivo = reader.ReadLine()
    Loop
End Using

Vejamos o que está sendo feito linha a linha.

Linha 1: criamos uma instancia da classe TextReader e para tanto, utilizamos o método OpenText, que lê um arquivo de texto e retorna um TextReader.

Linha 2: declaramos uma variável que será utilizada para ler cada linha do arquivo.

Linha 4: lê uma linha do arquivo utilizando o método ReadLine.

Linha 5: utilizamos a estrutura de repetição Do Until para lermos todas as linhas do arquivo. Veja que a condição para que ocorra uma iteração é que a variável linhaArquivo tenha algum valor.

Linha 6: escreve no console da aplicação a linha que foi lida.

Linha 7: utilizamos o método ReadLine novamente. Ao final do arquivo, quando não houver mais linhas, a variável linhaArquivo será igual a Nothing.

Linha 8: fim da estrutura de repetiçao Do Until.

Linha 9: fim do bloco Using.

Veja que para o nosso exemplo, o Using se mostra bastante útil, pois nesse caso, não precisamos nos preocupar em utilizar métodos para fechar o arquivo ou liberar o espaço alocado na memória, tudo isso é feito pela própria classe.

Por hoje é só. Espero que o bloco Using seja útil nas suas aplicações!

[ASP .NET] Upload de Arquivo

No post de hoje veremos uma maneira bem fácil para fazer upload de arquivos com ASP .NET. Da forma que mostrarei, por exemplo, é possível verificar se já existe um arquivo como o mesmo no na pasta e dar um aviso ao usuário ou alterar o nome desse arquivo.

Utilizaremos somente:

  • Um <asp:FileUpload />; e
  • um <asp:Button />;

O segredo está no código executado no botão. A seguir, mostro o código html da página e também o codebehind necessário para fazer o upload e em seguida explico o código.

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:FileUpload ID="FileUpload1" runat="server" Width="366px" />
        <br />
        <asp:Button ID="Button1" runat="server" Text="Button" />
    </div>
    </form>
</body>
</html>
    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click

        IO.File.WriteAllBytes("d:/" & FileUpload1.FileName, FileUpload1.FileBytes)

    End Sub

No código acima temos a procedure do botão onde executamos um métodos que cria um arquivo numa pasta do servidor.

O método que utilizamos, WriteAllBytes, está na classe File, dentro o Namespace IO. Chamamos o método passando dois parâmetros: o primeiro com o caminho onde o arquivo será gravado e um array de bytes do arquivo que selecionamos; para retornar tal array, pegamos a propriedade FileBytes do objeto FileUpload.

Importante. A pasta onde serão gravados os arquivos, deve ter permissão para escrita.

Extra

No primeiro parâmetro, onde passamos no caminho onde o arquivo será gravado, onde está FileUpload1.FileName, poderíamos colocar algo mais, para não permitir que um arquivo com um nome que já exista na pasta, seja sobreposto pelo novo. Abaixo temos o código do botão, mas com uma pequena alteração. Adicionei ao nome do arquivo que será gravado um GUID gerado pela função NewGuid. Dessa forma, o nome do arquivo ficaria com algo do tipo: fd81e93b-aa14-47b1-ab41-2779ce9138c3NOME_ORIGINAL_DO_ARQUIVO.txt.

    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click

        IO.File.WriteAllBytes("d:/" & Guid.NewGuid.ToString & FileUpload1.FileName, FileUpload1.FileBytes)

    End Sub

Outra coisa que poderia ser feito, é gerar uma hash MD5 com o nome original do arquivo.

Espero que tenha ajudado. Até uma próxima!