Hints/Tips úteis para TextBox

 

Este projeto mostrará um modo diferente de:

·         permitir só valores inteiros em um TextBox;

·         permitir só caracteres válidos e impedir caracteres inválidos em um TextBox;

·         realçar com cor endereços de e-mail em um TextBox;

·         verificar se um endereço de e-mail é ou não válido,

 

Via a classe System.Text.RegularExpressions.Regex().

Também mostrará como podemos usar ErrorProvider e ToolTip, quando o usuário tentar inserir valores inválidos em um TextBox.

 

Figura 1.

Código e Como trabalha

Usamos três TextBox: textboxInteger é para valores inteiros; textboxEmail para endereços de e-mail e textboxChars para valores caráter.  Comecemos com o TextBox 'textboxInteger'.

Como mencionado antes, esse TextBox somente permite valores inteiros. Não serão aceitos outros caracteres. Abaixo temos o método para entrada de inteiros:

 

private void textboxInteger_KeyPress(object sender,

     System.Windows.Forms.KeyPressEventArgs e)

{

     if (!Char.IsDigit(e.KeyChar) && e.KeyChar !=(char)8)

    {

        this.statusBar1.Text="incorrect key...";

        e.Handled = true; // o carater nao e passado para o control(TextBox)

    } else

            this.statusBar1.Text="OK..";

}

 

Como podemos observar, verificamos se o caráter digitado no TextBox é um dígito decimal ou uma tecla backspace para apagar caracteres. Se não for, não passaremos este caráter para o controle para que não apareça no TextBox(e.Handled=true). Caso contrário, exibimos o texto "OK..." na status bar, o que significa que foi digitado um caráter válido.

TextBox 'textboxChars'

Queremos aqui evitar a entrada de certos caracteres inválidos (i.e., 'a', 'b', 'c', '#', '*', '1', etc.). Implementamos assim três métodos em Form1.cs:

 

mTextboxCharsKeyPressWithForeach

mTextboxCharsKeyPressWithIF

mTextboxCharsKeyPressWithSwitch

 

private void mTextboxCharsKeyPressWithSwitch(object sender,

    System.Windows.Forms.KeyPressEventArgs e)

{

    this.statusBar1.Text="OK...";

    switch(e.KeyChar)

    { 

        case 'a':

        case 'b':

        case 'c':

        case '#':

        case '*':

        case '1': //este é um carater, não um inteiro

            e.Handled=true; //indica que o evento esta sendo tratado.

            this.errorProvider1.SetError(this.textboxChars,

               "not allowed chars: 'a','b','c','#','*','1'");

                 this.statusBar1.Text="not allowed char..."+e.KeyChar;

            break;

       default:

            //limpar o erro

            this.errorProvider1.SetError(this.textboxChars, "");

            break;

    } //fim do switch

}

 

Se os caracteres digitados forem 'a', 'b', 'c', '#', '*', '1', etc., então usamos um controle ErrorProvider e um ToolTip no TextBox. Um ícone de erro aparece próximo ao TextBox. Se passarmos o ponteiro do mouse por cima do ícone de erro, aparecerá um tool tip exibindo a mensagem erro.

TextBox 'textboxEmail'

Assim que for digitado um endereço de e-mail correto, mudarão as cores BackColor e ForeColor do TextBox, para amarelo e azul sublinhado respectivamente, junto com um MessageBox mostrando o nome de usuário e do host. Se nada for digitado após o caráter ‘@’, exibirá uma mensagem comunicando que não é um endereço de e-mail válido. Vejamos o método para o TextBox 'textboxEmail':

 

private void textboxEmail_TextChanged(object sender,

  System.EventArgs e)

{

   if (this.textboxEmail.Text.IndexOf("@") != -1

           && this.textboxEmail.Text.IndexOf(".") != -1) 

  {

     /* enderco de e-mail correto */

     this.textboxEmail.BackColor=Color.Yellow; 

     this.textboxEmail.ForeColor=Color.Blue;

     this.textboxEmail.Font=new Font("Arial",

       10, FontStyle.Underline);

   }

  else

   {

      // voltando ao status do TextBox antigo/previo

     this.textboxEmail.BackColor=Color.White;

     this.textboxEmail.ForeColor=Color.Black;

     this.textboxEmail.Font=new Font("Arial",

       10, FontStyle.Regular);

   }

}

 

O método IndexOf retorna um valor inteiro que indica o começo do substring dentro do objeto String. Se o substring não for achado, será retornado -1. Se o endereço de e-mail for válido, serão mudados BackColor e o ForeColor, além do FontStyle para "FontStyle.Underline". Caso contrário retornará ao estilo anterior.

Para verificar se o endereço de e-mail é ou não válido, uso um padrão de expressão regular com para validar o mesmo. Abaixo está método.

 

private void textboxEmail_Validating(object sender,

               System.ComponentModel.CancelEventArgs e)

{

    Regex emailregex = new Regex("(?[^@]+)@(?.+)");

    Match mmatch = emailregex.Match(this.textboxEmail.Text);

    if ( mmatch.Success )

   {

       MessageBox.Show("UserName: " +

          mmatch.Groups["user"].Value+"\n"+"HostName: " +

          mmatch.Groups["host"].Value,"E-Mail Information");

      this.statusBar1.Text=""; //limpar StatusBar

   }

  else

  {

     MessageBox.Show("invalid e-mail address...","E-Mail Information");

     e.Cancel=true; // nao sair do TextBox. Tentar novamente.

   }

}

 

O objeto Match retorna mesmo que não tenha encontrado um casamento no string fonte. A propriedade Success, nos permite decidir se continuamos processando o objeto Match ou exibimos uma mensagem de erro. Se bem sucedido, exibimos os named groups do "user" e do "host" da coleção Groups do objeto Match. Caso contrário tentamos novamente. Devemos nos assegurar de que a primeiro metade do string não contém um caráter ‘@’.

Conclusão

Projetei este programa para demonstrar os aspectos fundamentais para os novatos. Quem sabe os peritos possam fazer bom uso de alguns hints/tips.

Aproveite e boa codificação!