quarta-feira, 3 de setembro de 2008

 

Mudar a cor do campo quando recebe o foco (C# Windows Forms)

Seguindo a mesma linha da propriedade "AutoSelectTextOnFocus" que apresentei aqui tempos atrás, que seleciona o conteúdo de um campo quando ele recebe o foco, apresento agora o "HighlightControlOnFocus" que configura a cor de fundo de todos os campos editáveis em um formulário C# Windows Forms.
Para fazer isso basta adicionar a propriedade "HighlightControlOnFocus" ao formulário pai e configurá-lo nas janelas filhas:

        /// <summary>
        /// Muda a cor de fundo de um campo (habilitado) quando ele está em foco
        /// </summary>
        private bool bolHighlightControlOnFocus = false;
        [Category("Focus")]
        [Description("Define se a cor de fundo de um campo é alterada sempre quando ele estiver em foco.")]
        [DisplayName("
HighlightControlOnFocus")]
        public bool HighlightControlOnFocus
        {
            get { return bolHighlightControlOnFocus; }
            set { bolHighlightControlOnFocus = value; }
        }

        private void ConfiguraEnterComponente(object sender, EventArgs e)
        {
            if (sender is Control)
            {
                Control controle = (Control)sender;
                if (controle.Enabled)
                {
                    controle.BackColor = Color.LightYellow;
                }
            }
        }

        private void ConfiguraLeaveComponente(
object sender, EventArgs e)
        {
           
if (sender is Control)
            {
                Control controle = (Control)sender;
               
if (controle.Enabled)
                {
                    controle.BackColor = Color.White;
                }
            }
        }

       
private void ConfigurarFocoComponentes(Control controle)
        {
            // Configura o Enter e o Leave do componente
           
if ( (controle is MaskedTextBox)  ||
                 (controle
is ComboBox)       ||
                 (controle
is TextBox)        ||
                 (controle
is RichTextBox)    ||
                 (controle
is NumericUpDown))
            {
                controle.Enter +=
this.ConfiguraEnterComponente;
                controle.Leave +=
this.ConfiguraLeaveComponente;
            }

           
if (controle is DateTimeEdit)
            {
                controle.Validated +=
this.ConfiguraLeaveComponente;
            }

           
if (controle is ComboBox)
            {
                ComboBox combo = (ComboBox)controle;
                combo.DropDown +=
this.ConfiguraLeaveComponente;
            }

            // Chamada recursiva para configurar os controles filhos do item atual
            foreach (Control controleFilho in controle.Controls)
            {
               
this.ConfigurarFocoComponentes(controleFilho);
            }
        }

        private void JanelaBasica_Load(object sender, System.EventArgs e)
        {
            //...
            //...
            // Configura a cor de fundo dos campos que estão com o foco
            if (
this.HighlightControlOnFocus)
            {
                this.
ConfigurarFocoComponentes(this);
            }
            //...
            //...
        }

Artigos Relacionados:

Criando e configurando propriedades em C#

Selecionar conteúdo dos campos assim que estiverem com o Foco - C#

Marcadores: , , ,


Comentários:

Postar um comentário

Assinar Postar comentários [Atom]





<< Página inicial

Add to Technorati Favorites Adicionar aos Favoritos BlogBlogs diHITT

Assinar Postagens [Atom]