none
Bloquear caracteres no PasswordBox e posicionar cursor no final. RRS feed

  • Pergunta

  • Pessoal estou precisando bloquear alguns caracteres em um PassswordBox e estou fazendo da seguinte forma:

    private void txtSenha_PasswordChanged(object sender, RoutedEventArgs e)
        {
          string permitidas = "ABCDEFGHIJKLMNOPQRSTUVWYXZabcdefghijklmnopqrstuvwyxz1234567890@";
    
          for (int i = 0; i < ((PasswordBox)sender).Password.Length; i++)
          {
            if (!permitidas.Contains(((PasswordBox)sender).Password.Substring(i, 1)))
            {
              txtSenha.Password = ((PasswordBox)sender).Password.Remove(i, 1);
            }
          } 
        }
    

    O problema que estou enfrentando agora é que ao remover o caracter invalido quero posicionar o cursor de selecao no final da senha e continuar digitando outros caracteres, e desta forma que estou fazendo o cursor volta para o inicio.

    No TextBox eu tenho o metodo Select() mas no PasswordBox eu nao encontrei algo equivalente, neste controle so encontrei o SelectAll() que seleciona toda a senha.

    Se alguem puder me ajudar agradeço.

    quinta-feira, 3 de março de 2011 14:14

Respostas

Todas as Respostas

  • Hi,

    Minha indicação é que voce use uma validacao pra esse password tipo isso http://www.codeproject.com/KB/WPF/wpfvalidation.aspx

    mas se voce inciste ... ao emvez de usar o evento passwordchanged use o keydown e ao fazer a validacao se o char precionado nao for permitido voce cancela o evento que ele nao adicionar o char... tipo passa e.Handled = true que ele nao insere o char precionado na string(password). 

    Att,


    Adriel Codeco Silva
    Microsoft MCTS
    sexta-feira, 4 de março de 2011 04:45
    Moderador
  • Boa tarde Adriel no evento keyDown nao rolou porque primeiro ele insere o caracter especial nao permitido e na proxima verificação é identificado o caracter exemplo:

    &asd

    é inserido o caracter & e ao clicar no "a" ele nao insere

    no evento KeyDown eu nao tenho como saber a tecla que esta sendo clicada?

    Obs. Estou trabalhando com WPF.

     

    Vlw.

    quarta-feira, 9 de março de 2011 18:01
  • quinta-feira, 10 de março de 2011 16:37
    Moderador
  • AndreAlvesLima, tudo bom ?

    No link que vc passou tem o seguinte código. Estou usando o mesmo na minha aplicação Silverlight Web, pois estou com o mesmo problema que João estava.

            private void SetSelection(PasswordBox passwordBox, int start, int length)
            {            
                passwordBox.GetType().GetMethod("Select", BindingFlags.Instance | BindingFlags.NonPublic).Invoke(passwordBox, new object[] { start, length });
            }

    Segue o código do meu PasswordBox

            private void txtSenha_PasswordChanged(object sender, RoutedEventArgs e)
            {
                string permitidas = "ABCDEFGHIJKLMNOPQRSTUVWYXZabcdefghijklmnopqrstuvwyxz 1234567890@";
    
                for (int i = 0; i < ((PasswordBox)sender).Password.Length; i++)
                {
                    if (!permitidas.Contains(((PasswordBox)sender).Password.Substring(i, 1)))
                    {
                        txtSenha.Password = ((PasswordBox)sender).Password.Remove(i, 1);
                    }
                }
                SetSelection(txtSenha, 2, 0);
    
                txtSenha.Focus();
            }

    Esta dando o seguinte erro (abaixo) na linha de código do link q vc me enviou "passwordBox.GetType()...". O que pode ser feito neste caso !?

    "Object reference not set to an instance of an object."

    Abraços e obrigado!


    Atenciosamente, Guilherme. Caso esta resposta foi útil para seu problema, por favor, marque como mesma. Caso ela apenas responda sua pergunta corretamente, não esqueça de marca-lá.

    sexta-feira, 15 de junho de 2012 14:59