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
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: Como_Fazer, CSharp, Desenvolvimento, Dicas, DotNet
Assinar Postagens [Atom]
Postar um comentário