MaskedTextbox com máscara Oculta
Tem como ter um MaskedTextbox que só apareça a máscara quando for dado foco neste textbox ?
Jair Souza
Curtidas 0
Melhor post
Joel Rodrigues
24/06/2014
Se aqui deu certo, aí também deve dar, basta que você ajuste para a data que deseja.
Obs.: não sei se isso é um requisito fundamental de seu sistema, mas eu não perderia tempo com isso.
Obs.: não sei se isso é um requisito fundamental de seu sistema, mas eu não perderia tempo com isso.
GOSTEI 1
Mais Respostas
Jair Souza
16/06/2014
Tem como ter um MaskedTextbox que só apareça a máscara quando for dado foco neste textbox ?
Como fazer isto em Windows Form C# ?
[img]http://arquivo.devmedia.com.br/forum/imagem/343353-20140617-083012.png[/img]
GOSTEI 0
Joel Rodrigues
16/06/2014
Rapaz, automaticamente não. Só tratando o evento Focus dele.
GOSTEI 0
Jair Souza
16/06/2014
Como se faz isso ...Mask.Visible = false; ?
GOSTEI 0
Jair Souza
16/06/2014
Alguma dica ?
GOSTEI 0
Joel Rodrigues
16/06/2014
Fiz um pequeno exemplo aqui usando uma máscara padrão qualquer. Abaixo estão os eventos Enter e Leave do MaskedTextBox:
private void maskedTextBox1_Leave(object sender, EventArgs e) { (sender as MaskedTextBox).BackColor = Color.White; if ((sender as MaskedTextBox).Text == " -") { (sender as MaskedTextBox).Mask = ""; } } private void maskedTextBox1_Enter(object sender, EventArgs e) { (sender as MaskedTextBox).BackColor = Color.LightGreen; (sender as MaskedTextBox).Mask = "00000-9999"; }
GOSTEI 0
Joel Rodrigues
16/06/2014
Ah, explicando:
1) Usei "(sender as MaskedTextBox)" para que fique genérico, assim é possível ligar vários MaskedTextBoxes no mesmo evento e funcionará para todos.
2) Comparei o texto com " -" pois esse é o conteúdo do MaskedTextBox quando está com máscara, mas sem conteúdo digitado. Isso varia para cada máscara escolhida.
O resto acho que não tem mistério, né?
1) Usei "(sender as MaskedTextBox)" para que fique genérico, assim é possível ligar vários MaskedTextBoxes no mesmo evento e funcionará para todos.
2) Comparei o texto com " -" pois esse é o conteúdo do MaskedTextBox quando está com máscara, mas sem conteúdo digitado. Isso varia para cada máscara escolhida.
O resto acho que não tem mistério, né?
GOSTEI 0
Jair Souza
16/06/2014
Bom dia, não deu nenhum erro, mas não funcionou...pesquisei e achei este método abaixo.
O primeiro mask a ocultar é de data ___/__/___ com esta linha de código no botão adicionar registro, oculta somente as underlines as barras continuam aparecendo " / / ".
O primeiro mask a ocultar é de data ___/__/___ com esta linha de código no botão adicionar registro, oculta somente as underlines as barras continuam aparecendo " / / ".
private void BtnAdicionar_Click(object sender, EventArgs e) { dataNascMaskedTextBox.TextMaskFormat = MaskFormat.ExcludePromptAndLiterals; }
GOSTEI 0
Joel Rodrigues
16/06/2014
É, eu sei, por isso nem sugeri essa possibilidade.
GOSTEI 0
Jair Souza
16/06/2014
Com certeza não é fundamental, mas para meu conhecimento sim, agradeço pela sua ajuda.
GOSTEI 0
Jair Souza
16/06/2014
Talvez este método que uso para alterar o backcolor dos textbox quando recebem o foco, esteja em conflito com o código que sugeriste e por isso não funcione o método de ocultar a máscara ??
private void CorFocus(Control.ControlCollection controls) { foreach (Control control in controls) { if ((control is TextBox) || (control is ComboBox) || (control is MaskedTextBox)) { control.Enter += new EventHandler(controlFocus_Enter); control.Leave += new EventHandler(controlFocus_Leave); } CorFocus(control.Controls); } } void controlFocus_Enter(object sender, EventArgs e) { if (nomeTextBox.ReadOnly == false) (sender as Control).BackColor = Color.FromArgb(254, 244, 220); } void controlFocus_Leave(object sender, EventArgs e) { if (nomeTextBox.ReadOnly == false) (sender as Control).BackColor = Color.White; }
GOSTEI 0
Joel Rodrigues
16/06/2014
Talvez possa estar relacionado a isso sim. Experimente colocar um breakpoint no evento Enter que criou para tratar a máscara e veja se a execução para lá.
GOSTEI 1
Jair Souza
16/06/2014
Fiz esta adaptação no código acima incluindo a sua dica no código que altera o backcolor quando em foco, nas propriedades tirei a mask e no código fiz assim, o enter funciona, mas o Leave não...
void controlFocus_Enter(object sender, EventArgs e) { if (nomeTextBox.ReadOnly == false) (sender as Control).BackColor = Color.FromArgb(254, 244, 220); (sender as MaskedTextBox).Mask = "00/00/0000"; } void controlFocus_Leave(object sender, EventArgs e) { if (nomeTextBox.ReadOnly == false) (sender as Control).BackColor = Color.White; if ((sender as MaskedTextBox).Text == " //") { (sender as MaskedTextBox).Mask = ""; } }
GOSTEI 0
Joel Rodrigues
16/06/2014
Tem um if estranho aí, talvez você precise generalizar também usando o sender:
if (nomeTextBox.ReadOnly == false)
GOSTEI 0
Jair Souza
16/06/2014
Fiz a sua sugestão e não funcionou...tentei tratar no leave somente deste maskedtextbox como abaixo e tambem não funcionou.
Como deve ficar a mask dentro das aspas ? Acho que o problema está aí...
Como deve ficar a mask dentro das aspas ? Acho que o problema está aí...
private void dataNascMaskedTextBox_Leave(object sender, EventArgs e) { if ((sender as MaskedTextBox).Text == "__/__/____") (sender as MaskedTextBox).Mask = ""; }
GOSTEI 0
Joel Rodrigues
16/06/2014
Você já depurou, conforme eu sugeri, e viu se esse código está sendo executado?
GOSTEI 1
Jair Souza
16/06/2014
Depurei agora, mas...!!!
[img]http://arquivo.devmedia.com.br/forum/imagem/343353-20140626-204205.png[/img]
[img]http://arquivo.devmedia.com.br/forum/imagem/343353-20140626-204220.png[/img]
[img]http://arquivo.devmedia.com.br/forum/imagem/343353-20140626-204205.png[/img]
[img]http://arquivo.devmedia.com.br/forum/imagem/343353-20140626-204220.png[/img]
GOSTEI 0
Joel Rodrigues
16/06/2014
Me parece que nesse caso o MaskedTextBox não está vazio, então não vai ocultar a máscara, pois é exatamente isso que o IF verifica.
GOSTEI 0
Jair Souza
16/06/2014
O problema estava exatamente no if, pois o formato que se estava informando da máscara não estava correto.Então coloquei um ponto de interrupção(Break point) no if do evento leave e rodei o aplicativo, entrei no textbox e o evento Enter colocou a máscara certinho, sai do campo sem preencher, o break point parou o aplicativo, verifiquei o que ele tinha na
propriedade text e este valor coloquei no if.
Finalmente funcionando, valeu !
[img]http://arquivo.devmedia.com.br/forum/imagem/343353-20140628-183358.png[/img]
propriedade text e este valor coloquei no if.
Finalmente funcionando, valeu !
[img]http://arquivo.devmedia.com.br/forum/imagem/343353-20140628-183358.png[/img]
GOSTEI 0
Joel Rodrigues
16/06/2014
Opa, que bom.
Abraço e bons códigos.
Abraço e bons códigos.
GOSTEI 0