MaskedTextbox com máscara Oculta

.NET

16/06/2014

Tem como ter um MaskedTextbox que só apareça a máscara quando for dado foco neste textbox ?
Jair Souza

Jair Souza

Curtidas 0

Melhor post

Joel Rodrigues

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.
GOSTEI 1

Mais Respostas

Jair Souza

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

Joel Rodrigues

16/06/2014

Rapaz, automaticamente não. Só tratando o evento Focus dele.
GOSTEI 0
Jair Souza

Jair Souza

16/06/2014

Como se faz isso ...Mask.Visible = false; ?
GOSTEI 0
Jair Souza

Jair Souza

16/06/2014

Alguma dica ?
GOSTEI 0
Joel Rodrigues

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

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é?
GOSTEI 0
Jair Souza

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 " / / ".


private void BtnAdicionar_Click(object sender, EventArgs e)
         {
            dataNascMaskedTextBox.TextMaskFormat = MaskFormat.ExcludePromptAndLiterals;


         }
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

16/06/2014

É, eu sei, por isso nem sugeri essa possibilidade.
GOSTEI 0
Jair Souza

Jair Souza

16/06/2014

Com certeza não é fundamental, mas para meu conhecimento sim, agradeço pela sua ajuda.
GOSTEI 0
Jair Souza

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

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

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

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

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í...

private void dataNascMaskedTextBox_Leave(object sender, EventArgs e)
        {
            if ((sender as MaskedTextBox).Text == "__/__/____")

            (sender as MaskedTextBox).Mask = "";
        }
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

16/06/2014

Você já depurou, conforme eu sugeri, e viu se esse código está sendo executado?
GOSTEI 1
Jair Souza

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]
GOSTEI 0
Joel Rodrigues

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

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]
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

16/06/2014

Opa, que bom.
Abraço e bons códigos.
GOSTEI 0
POSTAR