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...
Per chiamare un indexer via reflection basta utilizzare in modo opportuno il metodo InvokeMember sul tipo di classe specifica.
Immaginiamo di avere un indexer di tipo object che utilizza come indice una stringa.
public class IndexerExample
{
...
public object this[string indexer]
{
get {...}
set {...}
}
...
}
Per chiamare l'Indexer è sufficiente passare il valore "Item" come PropertyName al metodo InvokeMember.
private void TestIndexerByReflection()
{
double numPI = 3.141592654;
IndexerExample example = new IndexerExample();
//Utilizzando l'oggetto di tipo IndexerExample
example["numPI"] = num3;
Console.WriteLine(example["numPI"]);
//Utilizzando la reflection
Type type = typeof (IndexerExample);
//example["numPI"] = numPI;
...