Procurando algo?

quarta-feira, 14 de dezembro de 2011

Filtrando entrada de dados no Windows Phone 7

Bom, comecei definitivamente a estudar o desenvolvimento de Windows Phone 7. Tive que comprar um novo Laptop pois o antigo já não aguentava o Visual Studio 2010 em toda sua glória e majestade :D Acabei comprando esse carinha aqui:


É um bom laptop e com 8GB em Dual Channel ficou melhor ainda. O teclado centralizado ajuda bastante na hora de digitar muitas linhas de código.

Bom, voltando ao Windows Phone 7, hoje aprendí uma coisa muito interessante sobre o teclado sobreposto do aparelho. Primeiro, você pode definir que teclas aparecerão na tela definindo a propriedade InputScope de um TextBox ou PasswordBox. Dessa forma, o teclado se ajusta ao contexto desejado para aquele campo e exibe somente teclas permitidas para aquele campo.

Os modos disponíveis estão na enumeração InputScopeNameValue e são 62 no total, embora só existam, hoje, 11 modos de teclados diferentes. Talvez os outros sirvam como placeholders para lançamentos futuros ou simplesmente para documentação adicional pra quem for ler seu código. Os modos Digit e Number, por exemplo, exibem as mesmas teclas, porém, se você escolher adequadamente, pode evitar ter que reescrever um trecho de código quando sair o Windows Phone "Rambo" ou "Mambo", sei lá.

Alguns são extremamente interessantes como o modo Chat que exibe abreviaturas para LOL, ROFL, Lolz e outros, bem como emoticons, bem úteis na hora de enviar SMS.  Também tem o modo Maps que carrega sugestões direto do Bing Maps conforme você digita o nome da cidade.

Modo Chat

Modo Number

Para escolher o InputScope desejado, basta adicionar tal informação direto no código XAML do controle. Assim:

<TextBox InputScope="PhoneNumber" />

Fácil, não?
Só que alguns telefones possuem teclado físico deslizante e isso não vai impedí-lo de digitar letras em um campo que só deve aceitar números. Então, você precisa impedir que isso aconteça via código. E é bem simples, veja:

void TextBox_KeyDown(object sender, KeyEventArgs e)
{
    switch(e.Key)
    {
        case Key.D0: case Key.D1: case Key.D2: case Key.D3: case Key.D4:
        case Key.D5: case Key.D6: case Key.D7: case Key.D8: case Key.D9:
            if ((Keyboard.Modifiers & ModifierKeys.Shift) == ModifierKeys.Shift)
            {
                // O Shift foi pressionado! Isso não é um bug. Acontece que o
                // usuário tentou digitar !@#$%¨&*() que ficam nas mesmas teclas
                // dos dígitos. Isso não é permitido, então engole essa tecla!
                e.Handled = true;
            }
            else
            {
                // Isso pode, então não faça nada. 
            }
            break;
        default:
            // Isso não pode, Segura aê!
            e.Handled = true;
            break;
    }
}

Pronto! Agora além de fornecer apenas as teclas relevantes ao contexto, você também restringiu a entrada incorreta.

Um comentário:

  1. Fala Daniel, fmz? estava dando uma zapeada pelo facebook, achei seu perfil e por consequência, esse blog seu.
    Não lembrava que tinha um blog, mas fmz.

    Queria te agradecer pelo tempo que estive lá na SEFAZ, pelo tanto que me ajudou, e me aturou também [não é fácil aturar um estagiário, eu sei rs] e pelos bons papos sobre Games, Xbox e tudo mais!


    Uma pena você, e o André terem saídos, mas como o André disse que você saiu, e foi pra algo melhor, te desejo muito sucesso na sua nova trajetória.

    Infelizmente ainda tentei voltar pra lá, por indicação do André, mas não fui aceito. Uma pena, gostava muito daquele lugar, e das pessoas que ali estavam!


    Me desculpe por alguma coisa que eu falei ou disse, no tempo que convivemos, tentei passar a melhor impressão possível já que eu era o mais novo membro ali.

    Prestarei a FATEC mais uma vez. Lembro que me disse uma vez, que teve que insistir bastante para passar, pois bem, vou acho que para a 5.a vez que prestarei, ADS, lógico.

    Um abraço, fica com Deus e obrigado por tudo.
    Edmar.

    ResponderExcluir