MaskedTextbox com máscara Oculta

16/06/2014

0

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

Jair Souza

Responder

Post mais votado

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.

Joel Rodrigues

Joel Rodrigues
Responder

Mais Posts

17/06/2014

Jair Souza

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]
Responder

17/06/2014

Joel Rodrigues

Rapaz, automaticamente não. Só tratando o evento Focus dele.
Responder

17/06/2014

Jair Souza

Como se faz isso ...Mask.Visible = false; ?
Responder

18/06/2014

Jair Souza

Alguma dica ?
Responder

18/06/2014

Joel Rodrigues

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";            
}
Responder

18/06/2014

Joel Rodrigues

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é?
Responder

24/06/2014

Jair Souza

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;


         }
Responder

24/06/2014

Joel Rodrigues

É, eu sei, por isso nem sugeri essa possibilidade.
Responder

24/06/2014

Jair Souza

Com certeza não é fundamental, mas para meu conhecimento sim, agradeço pela sua ajuda.
Responder

24/06/2014

Jair Souza

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;
        }
Responder

25/06/2014

Joel Rodrigues

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á.
Responder

25/06/2014

Jair Souza

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 = "";                
    			}
        }
Responder

25/06/2014

Joel Rodrigues

Tem um if estranho aí, talvez você precise generalizar também usando o sender:

if (nomeTextBox.ReadOnly == false)
Responder

25/06/2014

Jair Souza

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 = "";
        }
Responder

26/06/2014

Joel Rodrigues

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

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar