Sommario Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvii Parte I 1 Introduzione a Microsoft Visual Basic 2010 L’ambiente di sviluppo integrato (IDE) di Visual Studio . . . . . . . . . . . . 3 L’ambiente di sviluppo di Visual Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Gli strumenti di Visual Studio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 La finestra Progettazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Esecuzione di un programma Visual Basic . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 La finestra Proprietà. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Spostamento e ridimensionamento degli strumenti di programmazione . . . . . 17 Spostamento e ridimensionamento delle finestre degli strumenti. . . . . . . . 18 Ancoraggio delle finestre degli strumenti. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Nascondere le finestre degli strumenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 Passaggio da uno strumento o un file aperto all’altro utilizzando IDE Navigator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 Apertura di un browser Web in Visual Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 Come cercare supporto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 Gestire le impostazioni della Guida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 Uso del tasto funzione F1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 Personalizzazione delle impostazioni IDE per gli esercizi di questo libro . . . . . 29 Impostazione dell’IDE per lo sviluppo in Visual Basic . . . . . . . . . . . . . . . . . . . 29 Verifica delle impostazioni del progetto e del compilatore. . . . . . . . . . . . . . 31 Procedura aggiuntiva: uscire da Visual Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 Riferimenti rapidi del capitolo 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .34 2 Il tuo primo programma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 Lucky Seven: il tuo primo programma in Visual Basic . . . . . . . . . . . . . . . . . . . . . . 37 Passaggi di programmazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 Creazione dell’interfaccia utente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 Impostazione delle proprietà . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 Proprietà della casella immagine (PictureBox). . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 Scrivere il codice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 Uno sguardo alla routine Button1_Click . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 Esecuzione di applicazioni Visual Basic. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 Progetti di esempio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 Creazione di un file eseguibile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .60 ix x Sommario Distribuzione della tua applicazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 Procedura aggiuntiva: aggiunte a un programma . . . . . . . . . . . . . . . . . . . . . . . . . 63 Riferimenti rapidi del capitolo 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .64 3 Utilizzo dei controlli della Casella degli strumenti. . . . . . . . . . . . . . . . 67 Utilizzo base dei controlli: il programma Hello World. . . . . . . . . . . . . . . . . . . . . . 67 Utilizzo del controllo DateTimePicker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 Il programma Birthday . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 Controlli per la raccolta di input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 Utilizzo di caselle di gruppo e pulsanti di opzione . . . . . . . . . . . . . . . . . . . . . 81 Elaborazione dell'input con le caselle di riepilogo. . . . . . . . . . . . . . . . . . . . . .84 Cenni di terminologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 Procedura aggiuntiva: utilizzo del controllo LinkLabel . . . . . . . . . . . . . . . . . . . . . 91 Riferimenti rapidi del capitolo 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 4 Utilizzo di menu, barre degli strumenti e finestre di dialogo . . . . . . 97 Aggiunta di menu utilizzando il controllo MenuStrip . . . . . . . . . . . . . . . . . . . . . 97 Aggiunta di tasti di scelta ai comandi di menu. . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 Elaborazione delle scelte di menu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .102 Aggiunta di barre degli strumenti con il controllo ToolStrip . . . . . . . . . . . . . . .107 Utilizzo dei controlli delle finestre di dialogo . . . . . . . . . . . . . . . . . . . . . . . . . . . .110 Routine evento che gestiscono le finestre di dialogo comuni . . . . . . . . . . . . . .112 Procedura aggiuntiva: Assegnazione di tasti di scelta rapida ai menu . . . . . . . 117 Riferimenti rapidi del capitolo 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .119 Parte II 5 Principi fondamentali di programmazione Variabili e formule di Visual Basic e Framework .NET . . . . . . . . . . . . 123 Struttura di un’istruzione in Visual Basic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .123 Utilizzo di variabili per memorizzare informazioni. . . . . . . . . . . . . . . . . . . . . . . .124 Prenotazione di memoria per le variabili: l’istruzione Dim . . . . . . . . . . . . 124 Dichiarazione implicita delle variabili. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .126 Utilizzo di variabili in un programma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .127 Utilizzo di una variabile per memorizzare un input . . . . . . . . . . . . . . . . . . . . . . .130 Utilizzo di una variabile per ottenere un output. . . . . . . . . . . . . . . . . . . . . . . . . .133 Utilizzo di tipi di dati specifici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .135 Costanti: variabili che non cambiano . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .142 Utilizzo degli operatori di Visual Basic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .143 Matematica di base: Gli operatori +, –, *, e /. . . . . . . . . . . . . . . . . . . . . . . . . .144 Utilizzo degli operatori avanzati: \, Mod, ^, e & . . . . . . . . . . . . . . . . . . . . . . 147 Utilizzo di metodi matematici in Microsoft .NET Framework. . . . . . . . . . . . . . .152 Sommario xi Procedura aggiuntiva: definizione di un ordine di precedenza . . . . . . . . . . . . . 155 Utilizzo di parentesi in una formula . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .156 Riferimenti rapidi del capitolo 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .156 6 Utilizzo delle strutture decisionali . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 Programmazione basata su eventi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .159 Utilizzo delle espressioni condizionali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 Strutture decisionali If . . . Then . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 Test di varie condizioni in una struttura decisionale If . . . Then . . . . . . . . . .162 Utilizzo degli operatori logici in espressioni condizionali . . . . . . . . . . . . . .167 Effettuare operazioni di corto circuito tramite l’utilizzo di AndAlso e OrElse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .169 Strutture decisionali Select Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 Utilizzo di operatori di confronto con una struttura Select Case . . . . . . . . 173 Procedura aggiuntiva: rilevazione di eventi del mouse . . . . . . . . . . . . . . . . . . . .177 Riferimenti rapidi del capitolo 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 7 Utilizzo di cicli e timer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 Creazione di cicli For . . . Next . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .181 Utilizzo di una variabile contatore in un controllo TextBox a più righe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .183 Creazione di cicli For . . . Next complessi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .185 Utilizzo di un contatore in un ambito allargato . . . . . . . . . . . . . . . . . . . . . . .189 Scrittura di cicli Do . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .192 Come evitare i cicli infiniti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .193 Il controllo Timer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .196 Creazione di un orologio digitale utilizzando un controllo Timer . . . . . . . . . .197 Utilizzo di un oggetto timer per impostare un limite di tempo. . . . . . . . . . . . .200 Procedura aggiuntiva: inserimento di frammenti di codice . . . . . . . . . . . . . . . .203 Riferimenti rapidi del capitolo 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .207 8 Debug dei programmi Visual Basic . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 Ricerca e correzione degli errori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .209 Tre tipi di errore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .210 Identificazione degli errori di logica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .211 Faccia a faccia con il debug: utilizzo della modalità di debug . . . . . . . . . . . . . .212 Analisi delle variabili utilizzando la finestra Espressione di controllo . . . . . . . . 217 Visualizzatori: strumenti di debug che mostrano dei dati. . . . . . . . . . . . . . . . . .220 Utilizzo della Finestra di controllo immediato e della Finestra di comando. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .221 Come passare alla Finestra di comando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .223 xii Sommario Procedura aggiuntiva: eliminazione dei punti di interruzione . . . . . . . . . . . . . .224 Riferimenti rapidi del capitolo 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .225 9 Gestione strutturata degli errori. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 Gestione degli errori con l’istruzione Try . . . Catch . . . . . . . . . . . . . . . . . . . . . . .227 Quando utilizzare i gestori di errori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .228 Impostazione di un gestore: il blocco di codice Try. . . Catch . . . . . . . . . . . .229 Errori di percorso e di unità disco. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .229 Scrittura di un gestore di errori dell’unità disco . . . . . . . . . . . . . . . . . . . . . . . . . .233 Utilizzo della clausola Finally per eseguire attività di pulitura . . . . . . . . . . . . . .234 Gestori di errori Try . . . Catch sofisticati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .236 L'oggetto Exception. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .236 Determinazione del numero di tentativi possibili . . . . . . . . . . . . . . . . . . . . .239 Utilizzo di blocchi Try . . . Catch nidificati . . . . . . . . . . . . . . . . . . . . . . . . . . . . .242 Gestori di errori o tecniche di programmazione sicura? . . . . . . . . . . . . . . . . . . .242 Procedura aggiuntiva: l’istruzione Exit Try . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .243 Riferimenti rapidi del capitolo 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .244 10 Creazione di moduli e routine. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 Lavorare con i moduli . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 Creazione di un modulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .248 Utilizzo delle variabili pubbliche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251 Creazione di routine. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 Scrittura di routine Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .256 Sintassi di Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .257 Chiamata di una routine Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .258 Utilizzo di una funzione per effettuare un calcolo . . . . . . . . . . . . . . . . . . . .258 Scrittura di routine Sub . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .262 Sintassi di una routine Sub . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .262 Chiamata di una routine Sub . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .263 Usare una routine Sub per gestire l'input . . . . . . . . . . . . . . . . . . . . . . . . . . . .264 Procedura aggiuntiva: Passaggio di argomenti per valore e per riferimento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .268 Riferimenti rapidi del capitolo 10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .270 11 Utilizzo di array per gestire dati numerici e stringa. . . . . . . . . . . . . . 273 Utilizzo di array di variabili . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .273 Creazione di un array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 Dichiarazione di un array a lunghezza fissa. . . . . . . . . . . . . . . . . . . . . . . . . . .275 Allocazione della memoria. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276 Utilizzo degli elementi di un array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .277 Sommario xiii Dichiarazione di un array e assegnazione dei relativi valori iniziali . . . . . .278 Creazione di un array di lunghezza fissa in cui memorizzare delle temperature . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .279 Creazione di un array dinamico. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .283 Protezione del contenuto di un array mediante ReDim Preserve . . . . . . . . . . .287 Utilizzo di ReDim per gli array tridimensionali . . . . . . . . . . . . . . . . . . . . . . . .288 Procedura aggiuntiva: elaborazione di array di grandi dimensioni utilizzando i metodi della classe Array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .288 La classe Array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .288 Riferimenti rapidi del capitolo 11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .295 12 Utilizzo degli insiemi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297 Utilizzo di insiemi di oggetti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .297 Riferimento agli oggetti di un insieme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .298 Creazione di cicli For Each. . . Next . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .298 Utilizzo degli oggetti dell’insieme Controls . . . . . . . . . . . . . . . . . . . . . . . . . .299 Utilizzo della proprietà Name in un ciclo For Each . . . Next . . . . . . . . . . . . .302 Creazione di insiemi personali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .304 Dichiarazione di nuovi insiemi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .304 Procedura aggiuntiva: gli insiemi VBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .309 Creazione di una macro di Word . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310 Riferimenti rapidi del capitolo 12 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311 13 Esplorazione di file di testo ed elaborazione delle stringhe . . . . . . . 313 Lettura dei file di testo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313 Lo spazio dei nomi My . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314 La classe StreamReader. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316 Utilizzo del metodo ReadAllText. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317 Scrittura dei file di testo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .321 Il metodo WriteAlleText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .321 La classe StreamWriter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .322 Utilizzo del metodo WriteAllText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .323 Elaborazione delle stringhe tramite la classe String . . . . . . . . . . . . . . . . . . . . . .326 Ordinamento del testo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .329 Utilizzo dei codici ASCII . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .330 Ordinamento delle stringhe in una casella di testo . . . . . . . . . . . . . . . . . . . . 331 Esame del codice del programma Sort Text . . . . . . . . . . . . . . . . . . . . . . . . . .334 Protezione del testo con la crittografia di base . . . . . . . . . . . . . . . . . . . . . . . . . .336 Procedura aggiuntiva: Utilizzo dell'operatore Xor . . . . . . . . . . . . . . . . . . . . . . . .340 Analisi del codice del programma di crittografia. . . . . . . . . . . . . . . . . . . . . .342 Riferimenti rapidi del capitolo 13 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .345 xiv Sommario Parte III 14 Progettazione dell’interfaccia utente Gestione di form e controlli Windows in fase di esecuzione . . . . . . 351 Aggiunta di nuovi form a un programma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351 Utilizzo dei form . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .352 Utilizzo di più form . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .352 Utilizzo della proprietà DialogResult nel form di chiamata . . . . . . . . . . . . .358 Posizionamento dei form sul desktop di Windows . . . . . . . . . . . . . . . . . . . . . . .359 Riduzione, ingrandimento e ripristino delle finestre . . . . . . . . . . . . . . . . . . .364 Aggiunta di controlli a un form in fase di esecuzione . . . . . . . . . . . . . . . . . . . . .364 Organizzazione dei controlli in un form. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .367 Procedura aggiuntiva: selezione dell’oggetto di avvio . . . . . . . . . . . . . . . . . . . .371 Riferimenti rapidi del capitolo 14 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .373 15 Aggiunta di elementi grafici ed effetti di animazione . . . . . . . . . . . 375 Aggiunta di grafica utilizzando lo spazio dei nomi System.Drawing . . . . . . . . 376 Utilizzo del sistema di coordinate di un form. . . . . . . . . . . . . . . . . . . . . . . . . 376 La classe System.Drawing.Graphics. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376 Utilizzo dell’evento Paint del form . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .378 Aggiunta di animazione ai programmi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .380 Spostamento degli oggetti in un form . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .380 Proprietà Location . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .381 Creazione di animazioni mediante un oggetto Timer. . . . . . . . . . . . . . . . . .382 Espansione e compressione di oggetti durante l’esecuzione di un programma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .386 Procedura aggiuntiva: Modifica della trasparenza di un form . . . . . . . . . . . . . .388 Riferimenti rapidi del capitolo 15 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .390 16 Ereditarietà dei form e creazione di classi base . . . . . . . . . . . . . . . . . 393 Ereditarietà di un form tramite Selezione ereditarietà . . . . . . . . . . . . . . . . . . . .393 Creazione di classi base personali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .399 Aggiunta di una nuova classe a un progetto . . . . . . . . . . . . . . . . . . . . . . . . .401 Procedura aggiuntiva: Ereditarietà di una classe base . . . . . . . . . . . . . . . . . . . . .408 Riferimenti rapidi del capitolo 16 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .412 17 Utilizzo delle stampanti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415 Utilizzo della classe PrintDocument . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415 Stampa del testo da un oggetto casella di testo . . . . . . . . . . . . . . . . . . . . . .420 Stampa di file di testo composti da più pagine. . . . . . . . . . . . . . . . . . . . . . . . . . .424 Sommario xv Procedura aggiuntiva: Aggiunta delle finestre di dialogo Anteprima di stampa e Imposta pagina . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .430 Riferimenti rapidi del capitolo 17 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .437 Parte IV 18 Programmazione di database e per il Web Introduzione ad ADO.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441 Programmazione di database con ADO.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . .441 Terminologia per i database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .442 Utilizzo di un database Access. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .444 La finestra Origini dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .452 Utilizzo di controlli associati per visualizzare le informazioni di un database. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .458 Procedura aggiuntiva: istruzioni SQL, LINQ e filtro dei dati . . . . . . . . . . . . . . . .461 Riferimenti rapidi del capitolo 18 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .466 19 Presentazione dei dati mediante il controllo DataGridView . . . . . . 467 Utilizzo di DataGridView per visualizzare i record di un database . . . . . . . . . .467 Formattazione delle celle di DataGridView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479 Aggiunta di un secondo oggetto visualizzazione griglia dati . . . . . . . . . . . . . .482 Procedura aggiuntiva: aggiornamento del database originale . . . . . . . . . . . . .485 Riferimenti rapidi del capitolo 19 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .488 20 Creazione di siti e pagine Web con Visual Web Developer e ASP.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491 Parliamo di ASP.NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .491 Confronto tra pagine Web e Windows Form . . . . . . . . . . . . . . . . . . . . . . . . .493 Controlli server. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .493 Controlli HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .494 Creazione di un sito Web con Visual Web Developer . . . . . . . . . . . . . . . . . . . . .495 Analisi dei requisiti software per la programmazione in ASP.NET . . . . . . .495 Utilizzo di Web Page Designer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .498 Aggiunta di controlli server a un sito Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .501 Creazione di routine evento per i controlli delle pagine Web . . . . . . . . . . .504 Personalizzazione del modello di sito Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .509 Visualizzazione dei record di un database in una pagina Web . . . . . . . . . . . . .512 Procedura aggiuntiva: Impostazione del titolo di un sito Web in Internet Explorer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 519 Riferimenti rapidi del capitolo 20 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .522 xvi Sommario Appendice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523 Indice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 529 Ringraziamenti. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 545 Autore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547