terça-feira, 22 de janeiro de 2008

 

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

Quando você precisar que o conteúdo de um campo editável tipo TextBox e MaskedTextBox (herdados de TextBoxBase) ou NumericUpDown (UpDownBase) você pode extender o funcionamento desses componentes através de herança, mas isso deixa para depois.
Uma maneira mais fácil é criar um método com a mesma assinatura dos eventos "Enter" do controle e delegar esse método para todos os campos do formulário que precisam dessa funcionalidade.
Abaixo eu apresento o código do método "SelectText_Enter" que fica encarregado de selecionar o conteúdo do campo, de acordo com o tipo dele (no meu caso os herdados de "TextBoxBase" e "UpDownBase") e o evento "DelegateEnterFocus" que fica responsável por procurar todos os campos do formulário e delegar a funcionalidade criada para o evento "Enter" deles:

//___ Seleciona todo o texto de um controle. _______________________________________
private void SelectText_Enter(object sender, System.EventArgs e)
{
    // Executa o método de forma assíncrona - pois o MaskedTextBox já executa um
    //
select no evento "Enter" do foco, que acaba desfazendo a seleção.
    this.BeginInvoke((MethodInvoker)delegate()
    {
        if (sender is UpDownBase)
        {
            ((UpDownBase)sender).Select(0, ((UpDownBase)sender).Text.Length);
        }
        else if (sender is TextBoxBase)
        {
            ((TextBoxBase)sender).SelectAll();
        }
    });
}


//__ Associa o evento "SelectText_Enter" a cada um dos campos com texto ____________
private void DelegateEnterFocus(Control ctrl)
{
    if ((ctrl is UpDownBase) || (ctrl is TextBoxBase))
    {
        ctrl.Enter += SelectText_Enter;
        return;
    }

    // Chamada recursiva para associar o evento a todos os controles da interface
    foreach (Control ctrlChild in ctrl.Controls)
    {
        this.DelegateEnterFocus(ctrlChild);
    }
}


Depois de criados esses métodos, codifique o evento "Load" do formulário com a chamada para o evento "DelegateEnterFocus":

//___ Configura o evento "Enter" dos campos com texto ______________________________
private void JanTeste_Load(object sender, EventArgs e)
{
    this.DelegateEnterFocus(this);
}

Tópicos Relacionados

Criando e configurando propriedades em C#

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

Marcadores: , , , ,


Comentários:
muito bom!
parabéns.
 
Obrigado...
 
Me economizou muito trabalho braçal além de me agregar conhecimento.

Valeu =)
 

Postar um comentário

Assinar Postar comentários [Atom]





<< Página inicial

Add to Technorati Favorites Adicionar aos Favoritos BlogBlogs diHITT

Assinar Postagens [Atom]