Recentemente resolvi utilizar um controle MaskedTextBox em uma aplicação Windows Forms, para preencher um campo de data e utilizar a facilidade da máscara de data.
Para facilitar para o usuário, quando o formulário era apresentado na aplicação o campo de data já aparecia preenchido com a data atual. Bastava que o usuário aceitasse a data atual ou se quisesse alterar a data, o campo já apareceria selecionado facilitando assim a inserção da nova data.
Para fazer com que a informação no campo de data apareça selecionada quando o foco está no campo de data normalmente utilizamos o método SelectAll() do controle. No caso do controle MaskedTextBox este método não funciona diretamente como no controle TextBox. Encontrei duas formas de conseguir selecionar o texto como indicado na figura acima:
A primeira forma é através de delegate, chamando o método SelectAll, depois que todas as mensagens do formulário são processadas.
private void mskDataPublicacao_Enter(object sender, EventArgs e)
{
this.BeginInvoke((MethodInvoker)delegate()
{
this.mskDataPublicacao.SelectAll();
});
}
private void mskDataPublicacao_Enter(object sender, EventArgs e)
{
this.mskDataPublicacao.Focus();
this.mskDataPublicacao.SelectAll();
}