Può essere utile, per alcune applicazioni aggiungere una funzionalità di selezione automatica del testo, quando il fuoco viene attivato su di un controllo MaskedTextBox.

Apparentemente la soluzione sembra banale: chiamare il metodo SelectAll() del controllo, sull'evento OnEnter. Però questa soluzione non funziona, per ragioni di design infatti l'implementazione del controllo sovrascrive questa operazione subito dopo l'esecuzione dell'evento.

Per ovviare a questo problema basta semplicemente "posticipare" l'esecuzione dell'operazione SelectAll() eseguendola in modo asincrono con una BeginInvoke.

Esempio di codice gestione evento OnEnter() utilizzando una lambda expression

    private void mtxCognome_Enter(object sender, EventArgs e)

    {

         BeginInvoke((MethodInvoker)(() => mtxCognome.SelectAll()));

    }

Una soluzione alternativa è quella di implementare un controllo personalizzato estendendo il controllo MaskedTextBox ed implementando la funzione virtuale OnEnter() nonchè parametrizzando il  compotamento attraverso una proprietà.

Esempio di codice di estensione controllo MaskedTextBox

    public class MaskedTextBoxEx : MaskedTextBox

    {

        ...

       public bool AutoSelectAllOnEnter = true;

 

        protected override void OnEnter(EventArgs e)

        {

            if (AutoSelectAllOnEnter)

            {

                BeginInvoke((MethodInvoker) (SelectAll));

            }

 

            base.OnEnter(e);

        }

    }

Ed ecco il risultato in un applicazione d'esempio