none
Mudar cor do fundo do textbox quando recebe focus RRS feed

Respostas

  • Podes fazer isso de outra forma, crias duas funções genéricas, uma para o evento Focus In e outra para o Focus Out.
    No entanto necessitas sempre de chama essas funções nos eventos "Enter" e "Leave" de cada TextBox.


    Exemplo:


            private void textBox1_Enter(object sender, EventArgs e)
            {
                //Utiliza uma função genérica para o evento Focus In
                changeTextBoxFocusIn(sender);
            }
    
            private void textBox1_Leave(object sender, EventArgs e)
            {
                //Utiliza uma função genérica para o evento Focus Out
                changeTextBoxFocusOut(sender);
            }
    
            private void changeTextBoxFocusIn(object txtBox)
            {
                //faz o cast do tipo object para o tipo TextBox
                TextBox t = txtBox as TextBox;
                t.BackColor = Color.Aqua;
            }
    
            private void changeTextBoxFocusOut(object txtBox)
            {
                //faz o cast do tipo object para o tipo TextBox
                TextBox t = txtBox as TextBox;
                t.BackColor = Color.White;
            }
    
            private void textBox2_Enter(object sender, EventArgs e)
            {
                //Utiliza uma função genérica para o evento Focus In
                changeTextBoxFocusIn(sender);
            }
    
            private void textBox2_Leave(object sender, EventArgs e)
            {
                //Utiliza uma função genérica para o evento Focus Out
                changeTextBoxFocusOut(sender);
            }
    Cumprimentos 
    Bruno Pires - www.blastersystems.com/blog
    • Sugerido como Resposta Bruno AC Pires sexta-feira, 17 de julho de 2009 19:32
    • Marcado como Resposta shigue_work sexta-feira, 17 de julho de 2009 20:00
    sexta-feira, 17 de julho de 2009 19:32

Todas as Respostas

  • Viva,

    Estes eventos são os que necessitas para mudar a cor da textbox

            //Evento disparado quando a textBox obtém o focus
            private void textBox1_Enter(object sender, EventArgs e)
            {
                //mudar a cor da textBox
                this.textBox1.BackColor = Color.Aqua;
            }
    
            //Evento disparado quando a textBox perde o focus
            private void textBox1_Leave(object sender, EventArgs e)
            {
                //mudar a cor da textBox
                this.textBox1.BackColor = Color.White;
            }

    Cumprimentos
    Bruno Pires - www.blastersystems.com/blog
    • Sugerido como Resposta Bruno AC Pires sexta-feira, 17 de julho de 2009 15:02
    sexta-feira, 17 de julho de 2009 15:02
  • Opa valeu por responder Bruno,

    Mas preciso fazer para varios textboxes de 1 formulario não tem 1 mais generico para ir utilizando assim que ir apertando o tab?

    Abraços
    George Shiguetaka
    sexta-feira, 17 de julho de 2009 19:12
  • Podes fazer isso de outra forma, crias duas funções genéricas, uma para o evento Focus In e outra para o Focus Out.
    No entanto necessitas sempre de chama essas funções nos eventos "Enter" e "Leave" de cada TextBox.


    Exemplo:


            private void textBox1_Enter(object sender, EventArgs e)
            {
                //Utiliza uma função genérica para o evento Focus In
                changeTextBoxFocusIn(sender);
            }
    
            private void textBox1_Leave(object sender, EventArgs e)
            {
                //Utiliza uma função genérica para o evento Focus Out
                changeTextBoxFocusOut(sender);
            }
    
            private void changeTextBoxFocusIn(object txtBox)
            {
                //faz o cast do tipo object para o tipo TextBox
                TextBox t = txtBox as TextBox;
                t.BackColor = Color.Aqua;
            }
    
            private void changeTextBoxFocusOut(object txtBox)
            {
                //faz o cast do tipo object para o tipo TextBox
                TextBox t = txtBox as TextBox;
                t.BackColor = Color.White;
            }
    
            private void textBox2_Enter(object sender, EventArgs e)
            {
                //Utiliza uma função genérica para o evento Focus In
                changeTextBoxFocusIn(sender);
            }
    
            private void textBox2_Leave(object sender, EventArgs e)
            {
                //Utiliza uma função genérica para o evento Focus Out
                changeTextBoxFocusOut(sender);
            }
    Cumprimentos 
    Bruno Pires - www.blastersystems.com/blog
    • Sugerido como Resposta Bruno AC Pires sexta-feira, 17 de julho de 2009 19:32
    • Marcado como Resposta shigue_work sexta-feira, 17 de julho de 2009 20:00
    sexta-feira, 17 de julho de 2009 19:32

  • Desculpa estar postando aqui, sei que ate foi dado como resolvido o post, mas achei que ta meio falho. Não estou dizendo que as soluções apresentadas não funcionem, longe disso, pelo que posso perceber funcionarão perfeitamente.

    Tipo, voce ira perder muito tempo implementando sempre o focus e o leave dos seus textbox, simplesmente voce pode criar um componente textbox e implementar ele, assim sempre que voce colocar o textbox que voce criou na tela ele já irá fazer o esquema de troca de cor. Se quiser me passa seu email que eu mando um TextBox customizado que achei na net que faz exatamente isso que voce disse.

    abraço
    quarta-feira, 11 de novembro de 2009 20:22
  • Russo, olá, eu gostaria que se for do seu interesse real responder à questão, que você então poste o código já pronto de sua Tbox customizada.

    Obrigado desde Já!

    Sam Velásquez


    Sam Velasquez
    sábado, 11 de setembro de 2010 15:20
  • Boa Tarde George,

    Eu estava pesquisando e vi seu post que não trouxe uma solução que eu queria.

    Continuei pesquisando e encontrei a seguinte solução:(não pude postar o link então vou ter que colocar o código)

    private void Form1_Load(object sender, EventArgs e)
    {
    	AdicionarEvento(this);
    }
    
    private void AdicionarEvento(Control ctl)
    {
    	foreach (Control control in ctl.Controls)
    	{
    		if (control is TextBox)
    		{
    			control.Enter += new EventHandler(txt_Enter);
    			control.Leave += new EventHandler(txt_Leave);
    		}
    		if (control.HasChildren)
    			AdicionarEvento(control);
    	}
    }
    
    private void txt_Enter(object sender, EventArgs e)
    {
    	((TextBox)sender).BackColor = Color.Black;
    }
    
    private void txt_Leave(object sender, EventArgs e)
    {
    	((TextBox)sender).BackColor = Color.White;
    }

    Da forma que está ele vai mudar a cor de fundo para todos os controles do tipo TEXTBOX.

    Se precisar mudar para outro tipo de controle como um COMBOBOX é só adicionar um ELSE IF (CONTROL IS COMBOBOX) dentro do FOREACH e criar outra função de EVENTARGs com a função ((ComboBox)sender).BackColor = Color.Black;

    Achei melhor postar para que alguém que precise, como eu precisei, encontre mais facilmente a solução.

    Fazendo dessa forma não há a necessidade de setar o evento Enter e Leave de Cada Campo.

    Abraço.


    • Editado Michlos quarta-feira, 25 de junho de 2014 22:12
    • Sugerido como Resposta Michlos quarta-feira, 25 de junho de 2014 22:14
    quarta-feira, 25 de junho de 2014 20:55
  • Michlos

    muito bom seu código, só pra ajudar a negada vou passar o que eu fiz para ajudar um pouco mais....

    ao invés de colocar ele no form, criei uma classe e deixei a void como public, aí nos Load dos forms eu apenas instancio a classe e chamo a procedure.

    Show de bola!

    quinta-feira, 26 de junho de 2014 11:16