Non possiamo descrivere in questa sede tutti i controlli di Visual Basic .NET; i soli controlli standard, infatti, sono almeno 45, contro i 20 di Visual Basic 6. Di conseguenza, ci limiteremo ad analizzare i nuovi oggetti introdotti da VB .NET e, brevemente, quelli che presentano cambiamenti significati rispetto alle versioni precedenti. Per ogni controllo analizzato, cominceremo con l'esporre le nuove proprietà e i nuovi metodi di cui dispone; potrebbe sembrare un approccio noioso, ma dato che la maggior parte delle proprietà e dei metodi hanno cambiato nome da VB 6 a VB .NET, questo è l'unico modo per evitare di non ritrovare più quello che serve quando si lavora con il nuovo ambiente di sviluppo.
Uno dei controlli maggiormente potenziati è la TextBox. La prima cosa da far notare è che è stato finalmente superato il limite dei 64.000 caratteri circa visualizzabili: ora è possibile, teoricamente, inserire fino a 2 GB di informazioni in una singola casella di testo. Una delle proprietà più interessanti, peraltro comune a tutti i controlli, è la proprietà Anchor, che consente di adattare il controllo alle dimensioni della finestra. Per impostarla, fare clic sulla freccia visualizzata a destra di tale proprietà: comparirà una piccola finestra in cui selezionare, con un clic del mouse, i bordi della finestra a cui si vuole ancorare il controllo.
L'impostazione predefinita è Top, Left, cioè il controllo ancorato al bordo sinistro in alto: in pratica l'oggetto non viene adattato alle dimensioni della finestra, ma resta fisso nella sua posizione. Proviamo ad inserire una TextBox sulla form, in una posizione qualsiasi, e ad impostare la sua proprietà Anchor su Top, Left, Right. Se ora proviamo a ridimensionare il form, anche in fase di progettazione, noteremo che la casella di testo di allunga o si riduce in accordo alle dimensioni della finestra. Analogamente, se posizioniamo la TextBox nella parte bassa del form e impostiamo Anchor su Bottom, Left, essa rimarrà sempre alla stessa distanza dal bordo inferiore della finestra, qualunque dimensione essa abbia.
Passando alle proprietà specifiche della TextBox, AcceptsReturn e AcceptsTab consentono di stabilire se il controllo deve accettare, rispettivamente, i caratteri Invio e Tab. Ad esempio, la prima proprietà è utile quando si ha un controllo multilinea e si vuole fare in modo che, premendo il tasto Invio, venga inserita una nuova linea di testo; se, invece, AcceptsReturn è False (impostazione predefinita), premendo Invio verrà attivato il pulsante di default della form. AcceptsTab deve essere impostata su true se si vuole dare la possibilità di inserire caratteri di tabulazione nella TextBox, altrimenti la pressione del tasto Tab sposterà lo stato attivo sul controllo successivo.
Altra proprietà importante è Lines, che consente di definire le righe di testo della casella, nel caso in cui la proprietà MultiLine sia impostata su true. facendo clic sul pulsante con i tre puntini in corrispondenza della proprietà Lines, verrà visualizzato la finestra di dialogo String Collection Editor, in cui è possibile digitare le righe che si vogliono visualizzare, separate da Invio.
Per quanto riguarda i metodi, citiamo qui solo i più interessanti, rimandando alla consultazione della Guida in linea per l'elenco completo. Il metodo AppendText aggiunge il testo specificato alla fine del contenuto nella TextBox. I metodi Copy, Cut e Paste, rispettivamente, permettono di copiare, tagliare ed incollare il testo: le operazioni con gli Appunti di Windows, che prima si realizzavano tramite l'oggetto Clipboard, ora sono accessibili come metodi della TextBox. Il metodo Focus, comune a tutti i controlli, consente di spostare lo stato attivo sull'oggetto su cui viene richiamato. Il metodo Undo, infine, annulla l'ultima operazione e, di fatto, equivale alla pressione della combinazione di tasti CtrL+Z.
Vediamo ora quali sono i principali eventi del controllo TextBox e come si gestiscono. L'evento Change è stato rinominato in TextChanged. Ma gli eventi su cui vale la pena spendere qualche parola sono KeyDown, KeyUp e KeyPress: analizziamoli ricordando che le considerazioni che verranno fatte sono valide per tutti i controlli che possono generare gli eventi KeyDown, KeyUp e KeyPress.
Per quanto riguarda i primi due, nelle precedenti versioni di Visual Basic essi avevano come parametri KeyCode e Shift, che permettevano di sapere quale carattere era stato premuto e, controllando il valore di Shift, se in combinazione con ALT, CtrL o SHIFT; inoltre, scrivendo all'interno dell'evento KeyCode = 0, era possibile annullare la digitazione. Tutte queste informazioni, in VB .NET, sono contenute nel parametro e, che è di tipo System.Windows.Forms.KeyEventArgs:
Private Sub TextBox1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyUp
End Sub
In particolare, per quanto riguarda gli eventi KeyUp e KeyDown, l'oggetto e espone le proprietà KeyCode, Alt, Control e Shift, utili per sapere quale carattere è stato premuto e se in combinazione con i tasti ALT, CtrL o SHIFT. Considerate l'esempio seguente:
Private Sub TextBox1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyUp
If e.KeyCode = Keys.F And e.Shift = true Then
MsgBox("Premuta la combinazione SHIFT+F.")
End If
End Sub
Keys è un'enumerazione di tutti i caratteri della tastiera e può quindi essere utilizzato per sapere quale carattere è stato premuto: in questo esempio si controlla se e.KeyCode è uguale a Keys.F, cioè se è stato premuto il carattere F. e.Shift = true, invece, è usato per sapere se insieme al tasto F è stato premuto anche SHIFT.
Il parametro e dell'evento KeyPress, invece, espone tra le altre le proprietà KeyChar e Handled; la prima contiene la rappresentazione in formato stringa del carattere premuto, mentre l'altra consente di dire a Visual Basic che l'evento KeyPress è gestito, cioè che non si vuole visualizzare il carattere premuto nella TextBox perché sono state fatte altre elaborazioni: in pratica, equivale a porre KeyAscii = 0 nell'evento KeyPress delle precedenti versioni di Visual Basic.
E' arrivato il momento di concretizzare quanto abbiamo detto finora con un esempio pratico. Realizziamo un'ipotetica finestra per il login di un'applicazione: per essere riconosciuto come valido, un utente deve digitare nome utente e password corretti (nel nostro esempio saranno rispettivamente utente e pass); vogliamo però prevedere anche un funzione di emergenza, in modo tale che sia possibile entrare anche se ci si dimentica la password. Nel nostro caso faremo una cosa molto semplice: la procedura di emergenza consiste nel digitare il nome pippo e premere la combinazione di tasti SHIFT+E.
Iniziamo quindi a realizzare l'esempio, inserendo i controlli nella form in modo da ottenere una finestra simile a quella riprodotta a lato. Nella tabella qui sotto sono riportati i nomi dei controlli utilizzati con i valori delle proprietà da modificare:
|
E' possibile scaricare la form contenente solo gli elementi dell'interfaccia utente, nel caso non si riesca a ricreare la disposizione dei controlli proposta.
E' il momento di scrivere il codice. Innanzi tutto, vogliamo che il pulsante OK venga attivato solo quando sono stati immessi sia il nome utente sia la password. Questo comportamento si ottiene con il codice seguente:
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
'La proprietà "TextLength" è usata per recuperare la lunghezza del testo digitato.
If TextBox1.TextLength > 0 And TextBox2.TextLength > 0 Then
Button1.Enabled = true
Else
Button1.Enabled = False
End If
End Sub
Private Sub TextBox2_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged
'La proprietà "TextLength" è usata per recuperare la lunghezza del testo digitato.
If TextBox1.TextLength > 0 And TextBox2.TextLength > 0 Then
Button1.Enabled = true
Else
Button1.Enabled = False
End If
End Sub
La proprietà TextLength restituisce il numero di caratteri contenuti nella casella di testo su cui viene invocata, e corrisponde alla funzione Len(testo) delle versioni precedenti di Visual Basic. La funzione di controllo del login è molto semplice:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If TextBox1.Text = "utente" AndAlso TextBox2.Text = "pass" Then
Me.Close()
Else
MsgBox("La password digitata non è valida.", MsgBoxStyle.Exclamation)
TextBox1.Focus()
End If
End Sub
Il significato del nuovo operatore AndAlso è stato spiegato nella I cambiamenti nei tipi di dato e nelle dichiarazioni. A questo punto l'esempio è già operativo: avendo impostato la proprietà AcceptButton della form su Button1, è possibile attivare la routine Button1_Click semplicemente premendo il pulsante Invio (naturalmente quando il pulsante è attivo). Ma noi abbiamo deciso di prevedere anche una funzione di emergenza:
Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
If TextBox1.Text = "pippo" AndAlso e.Shift = true AndAlso e.KeyCode = Keys.E Then
MsgBox("E' stata usata la procedura di emergenza.", MsgBoxStyle.Information)
Me.Close()
End If
End Sub
Questa routine semplicemente controlla se, quando il contenuto di TextBox1 è pippo, viene premuta la combinazione SHIFT+E, nel qual caso visualizza un messaggio per informare l'utente che ha utilizzato la combinazione di emergenza. E' possibile scaricare il codice completo dell'esempio facendo clic qui.
Nella prossima Lezione parleremo dei controlli PictureBox, Panel e GroupBox: il primo ha subito numerosi cambiamenti rispetto alle versioni precedenti, mentre il secondo è una novità di Visual Basic. NET; il controllo GroupBox, infine, sostituisce il vecchio Frame.