Usuário com melhor resposta
Bloquear caracteres no PasswordBox e posicionar cursor no final.

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.
Respostas
-
João,
Veja se isto te ajuda em algo:
André Alves de Lima
Microsoft MVP - Client App Dev
Visite o meu site: http://www.andrealveslima.com.br
Me siga no Twitter: @andrealveslima- Sugerido como Resposta AndreAlvesLimaModerator sexta-feira, 11 de março de 2011 17:06
- Marcado como Resposta AndreAlvesLimaModerator sexta-feira, 25 de março de 2011 16:59
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,
-
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.
-
João,
Veja se isto te ajuda em algo:
André Alves de Lima
Microsoft MVP - Client App Dev
Visite o meu site: http://www.andrealveslima.com.br
Me siga no Twitter: @andrealveslima- Sugerido como Resposta AndreAlvesLimaModerator sexta-feira, 11 de março de 2011 17:06
- Marcado como Resposta AndreAlvesLimaModerator sexta-feira, 25 de março de 2011 16:59
-
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á.