Traduzione letterale per "Implement 
accessibility features", tratto direttamente dalla Study Guide di Lorenzo. Cosa significa? Beh, fate una prova: prendete 
un'applicazione che avete scritto voi, trovate l'icona del file EXE 
e selezionatela. No, non fate doppio-click, selezionatela e basta! 
Adesso bendatevi gli occhi, per bene, cercate il tasto Invio/Enter sulla 
tastiera e premetelo: se la vostra applicazione funziona correttamente, l'avete 
appena aperta. Fin qua è facile, no?
  Ora, provate ad usarla senza vedere un accidenti. Molte 
persone, compreso (una volta) il buon vecchio nonno Costantino, vivono 
quotidianamente così. Come ve la cavate voi??? Maluccio, non è vero? Possiamo migliorare 
le cose? Beh, un pochino (ma molto poco), io ho fatto qualche esperimento e ve 
lo riporto.
Siccome mi stanno a cuore i problemi dei non-vedenti, vediamo di migliorare 
la fruibilità e la user-friendilabilità (come mi piace l'italiano 
 ), del nostro software a questa categoria di 
persone. Di quali strumenti abbiamo bisogno? Cosa dobbiamo fare? Beh, 
innanzitutto, sappiate che Windows contiene un tool che è in grado di 
leggere (questa è una parola grossa) tutto il testo che gli arriva sotto il 
naso: pagine web, per esempio. Oppure, pronuncia le lettere man mano che le 
digitate, e così via.
Questo tool, che io non avevo mai visto e l'ho scoperto oggi, si chiama Narrator, 
e lo potete trovare in:
Start --> Programs --> Accessories --> 
Accessibility --> Narrator
Come? Avete ancora la benda sugli occhi??? 
Beh, fate così, allora:
CTRL+ESC --> R --> scrivete "narrator" 
--> premete Invio
Ho provato ad usare Windows con il Narrator aperto. 
Francamente, sono stato un po' disorientato: sarà l'inglese letto della voce 
sintetizzata, sarà qualcos'altro, ma non ho afferrato la logica. Provate ad 
aprire Word mantenendo aperto il Narrator: sembra che 
prima legga la barra del titolo, poi legga tutti i menù 
(File, Edit, View, etc.), poi dice "Toolbar" una decina di volte e così via. Il testo 
non lo legge mai, si ferma prima.....Provate poi ad aprire 
Notepad, scrivete lentamente: il Narrator legge ogni singolo 
tasto che premete.
Come si traduce sotto questo in .NET?
Possiamo fare in 
modo che il Narrator legga ad alta voce qualcosa, per facilitare l'utilizzo a 
chi non sta vedendo nulla? Vediamo un po'. La classe Control di 
.NET espone alcune property proprio a questo scopo. Tutte 
le classi che ereditano da Control, 
ovviamente, espongono tali proprietà. Ok, benissimo, cosa fanno? A cosa servono?
Per capirlo, vediamo di usare la nostra applicazione tenendo aperto il 
Narrator, giusto per capire come si comporta. Si può fare sia dall'IDE, che 
direttamente dall'eseguibile, dipende da voi. Usiamo il TAB per 
spostarci da un controllo all'altro sulla nostra WF: quando raggiungiamo il 
button btnCalculate, cosa succede? Il Narrator parla e 
dice:
"Calcola. Push Button to press. Use Space 
Bar."       
Ovviamente la stringa Calcola è letta all'inglese, ma non fa nulla. 
Quello che ci interessa è la logica. Narrator leggere la property 
Text del Button        
         , poi ci aggiunge 
del suo, capendo che è un pulsante e via dicendo. E' così, secondo voi?  FALSO!!!! NET espone la prima property interessante, 
AccessibleRole, che indica il tipo di oggetto su 
cui ci troviamo, e che Narrator userà per spiegare all'utente come interagire: con il 
Button ci dice di usare la Space Bar, per esempio. Provate ad aprire il 
sorgente, e date un'occhiata alla property AccessibleRole: è possibile impostare il tipo di 
oggetto da un vasto elenco: CheckButton, ComboBox, List, MenuBar, Dialog, etc. 
etc. Provate a cambiare valore, ricompilare e ad eseguire l'applicazione come 
prima. Questa volta il Narrator dirà una cosa diversa, in base al tipo di 
AccessibleRole  
           
          
           
 impostato. In questo modo, l'utente non-vedente sa come comportarsi quando il focus 
è su un oggetto ben specifico: tipo di oggetto quale tasto usare, e 
così via.       
             
      
Questo nel caso in cui la property Text del Control sia valorizzata. 
Cosa succede nel caso in cui la Text sia string.Empty? Il Narrator leggere la stringa 
impostata nella seconda property interessante, ovvero 
AccessibleName. Provate ad aggiungere un nuovo Button sulla WF, 
lasciate la property Text vuota e scrivete qualcosa, tipo "This is a empty 
button on this form!" in AccessibleRole. Ricompilate, eseguite, usate il 
TAB fino a raggiungere il nuovo Button che avete appena aggiunto. Questa volta 
il Narrator dirà:
"This is a empty button on this form! Push Button to press. Use Space 
Bar."
Adesso il Narrator ha usato AccessibleName invece di Text. Sintatticamente, 
quindi, possiamo indicare questo funzionamento in questo modo:
{ Control.AccessibleName | Control.Text } + 
Control.AccessibleRole + Narrator.Other
In realtà, come si vede, il controllo su quello che Narrator dice l'abbiamo 
solo in parte: Narrator.Other è un "qualcosa" che aggiunge lui (in attesa di 
essere smentito, ovviamente). Esiste anche la property AccessibleDescription, ma 
la sto ancora sperimentando... 