maskedit-windows-phoneOlá pessoal, tudo bom?

Para responder à dúvida de um leitor do Blog, resolvi escrever esse post que demonstra um exemplo de como implementar um “maskedit” em C#. Nesse caso fiz um método que recebe por parâmetro o TextBox onde se deseja aplicar a máscara e formata os números digitados com duas casas decimais conforme o usuário os for digitando.

Como é possível observar na figura de exemplo ao lado, dentro do TextBox (txtValor) os números digitados vão sendo exibidos conforme a máscara aplicada “#,99” e no TextBlock (txtNumerosDigitados) exibo os números digitados sem a formatação aplicada pelo “maskedit”.

Toda ação de máscara ocorre no evento KeyDown do TextBox, onde verifico em primeiro lugar se a tecla pressionada é um número ou o BackSpace, caso contrário, quaisquer outras teclas serão desprezadas, ou seja, para essa máscara apenas números e BackSpace são aceitos.

Confira abaixo o código XAML utilizado para montar a interface do exemplo:

...


  
  




  
  
  

...

Para completar o exemplo, o código C# associado à implementação XAML demonstrada acima:

...
public partial class MainPage : PhoneApplicationPage
{
  // Constructor
  public MainPage()
  {
    InitializeComponent();
    // Sample code to localize the ApplicationBar
    //BuildLocalizedApplicationBar();
  }

  string numero = "";

  private void MaskeditNumererico_DuasCasasDecimais(TextBox txt, KeyEventArgs e)
  {
  //Verifica de a tecla digitada foi algo diferente de números ou BackSpace
  if (e.Key != Key.Back && (e.Key < Key.D0 || e.Key > Key.D9))
  {
    e.Handled = true;
  }
  else
  {
    if (e.Key == Key.Back && numero.Length > 0) //Se digitou BackSpace então retiramos o último número digitado
      numero = numero.Substring(0, numero.Length - 1);
    else
      numero += Convert.ToChar(e.PlatformKeyCode).ToString(); //Concatenamos o número digitado aos já existentes

    //Verificações para realizar o maskedit em C#. Nesse caso o formato são números com 2 casas decimais
    if (numero.Length == 0)
      txt.Text = "";
    else if (numero.Length < 2)
      txt.Text = "0,0" + numero;
    else if (numero.Length == 2)
      txt.Text = "0," + numero;
    else
      txt.Text = numero.Substring(0, numero.Length - 2) + "," + numero.Substring(numero.Length - 2, 2);
    }
  }

  private void txtValor_KeyDown(object sender, KeyEventArgs e)
  {
    MaskeditNumererico_DuasCasasDecimais(txtValor, e);

    //TextBlock que exibe os números digitados sem a formatação do "maskedit"
    txbNumerosDigitados.Text = numero;
  }

...

Fica a dica !

 

Grande abraço,

Eduardo Henrique Rizo

MCP

Post Relacionado: