Le avventure in VB.Net di un principiante ex-VB6 - 3
a cura di Oscar Zanin e Diego Cattaruzza (requisiti: Visual Basic Express e SqlServer Express)

Premessa
Dopo aver predisposto l'ambiente di programmazione (primo articolo) e il database di esempio (secondo articolo), si può dare inizio allo sviluppo del nuovo progetto. Ma prima...

Istallazione di un controllo di terze parti: Krypton Tools
Leggendo i tanti post del sito mi sono imbattuto in uno che parlava di questo tool di controlli. Incuriosito sono andato sul sito del produttore http://www.componentfactory.com/, ho guardato alcuni ScreenCast, l'ho ritenuto molto bello ed elegante e l'ho quindi scaricato ed installato.
Lo sfrutterò per la creazione della parte di applicazione di esempio. Pertanto, dovreste scaricarlo ed installarlo anche voi. Ritengo sia un utile esercizio per capire come potere usufruire di prodotti aggiuntivi rispetto a quelli messi a disposizione dall'IDE di Visual Basic.
Se non vorrete utilizzarlo sarà comunque possibile seguire l'articolo e mettere in pratica il codice. Il tool di controlli verrà infatti utilizzato esclusivamente per cambiare l'aspetto dei form. Tutti gli altri controlli usati saranno standard.

La cartella Immagini
Create, allo stesso livello della cartella GesImp\Risorse creata contestualmente al database, la cartella GesImp\Immagini.
Come potete facilmente intuire, vi troveranno collocazione le immagini/icone che utilizzeremo per form e pulsanti.
Il download del set di immagini/icone che io utilizzerò lo potrete effettuare attraverso il link in fondo all'articolo. Sono tutte icone liberamente scaricabili dal sito http://www.everaldo.com e fanno parte del pacchetto Crystal Project Icons.

Creazione di un nuovo progetto
Lanciamo ora il Visual Basic. Una volta caricata la Pagina iniziale clicchiamo su Crea Progetto. Si aprirà la form "Nuovo progetto". Nell'elenco dei "Tipi di progetto" selezioniamo Windows; nei "Modelli" Applicazione Windows Form e come "Nome" digitiamo "PrimiPassi".

[Diego] Nelle proprietà del progetto, scheda Application, spuntate la casella Enable application framework, assicuratevi di 'non' importare (scheda References) il namespace Microsoft.VisualBasic (Oscar indica le stesse operazioni più avanti, io caldeggio di farlo 'subito', come metodo: create un progetto e apportate immediatamente le eventuali modifiche di impostazione).
Qui, e altrove, noterete che Oscar usa la versione italiana, mentre io preferisco la versione inglese. Questo significa che vi toccherà ragionare di volta in volta cosa intendo dire io o Oscar, a seconda della lingua del vostro prodotto.
Qui, e altrove, ritroverete alcuni concetti e anche codice provenienti da altre fonti, segnatamente la serie "Guarda! Senza mani!", che si consiglia di leggere o rileggere, anche senza seguirne lo sviluppo, dato che non è stato possibile concluderla, per defezione di Sabrina Cosolo, che ne era l'autrice principale.

In "Esplora soluzioni" selezioniamo ed eliminiamo la Form1 creata di default, dato che vogliamo usare le Krypton form (se non intendete usufruire del tool di controlli, come detto in precedenza, non eliminate la Form1).

Creiamo la nostra prima classe: Program
Questa sarà la classe di accesso all'applicativo.
In Esplora soluzioni facciamo click con il tasto destro sul nome del progetto, nel menù selezioniamo Aggiungi e quindi Classe, diamo il nome Program.
Il codice è il seguente e verrà spiegato in seguito:

Public Class Program
  <STAThread()> _
  Shared Sub Main()
    'Avvio l'applicazione
    Application.EnableVisualStyles()
    Application.SetCompatibleTextRenderingDefault(False)
    Application.Run(New FrmMain)
  End Sub
End Class

Altra cosa da notare è che (adesso) viene segnalato un errore in corrispondenza di FrmMain. Giustamente: ancora non esiste. Quando la creeremo l'errore scomparirà.
Approfitto dell'occasione per consigliare di visualizzare la barra dell'Elenco errori cliccando sulla voce di menù "Visualizza" e quindi su "Elenco errori".

Facciamo un primo salvataggio. Nel form che appare digitiamo come nome PrimiPassi, scegliamo come cartella quella creata in precedenza (Gesimp) contenente già le sottocartelle Immagini e Risorse. NON usate "Crea directory per soluzione".

Creazione di progetti accessori
Creiamo ora altri tre progetti aggiungendoli alla soluzione. Sono tre librerie di classi di utilità come quelle descritte negli articoli "Guarda! Senza mani!", suddivise in:

Vi troveranno posto classi quasi identiche a quelle (a parte l'italianizzazione dei nomi), altre leggermente modificate e altre ancora nuove, create da me.

Clicchiamo sulla voce di menù File, su Aggiungi e quindi su Nuovo progetto.
Nel form che appare selezioniamo in "Modelli" Libreria di classe e diamo il "Nome" APP.Base. Il percorso proposto dovrebbe già essere corretto e puntare alla cartella della soluzione.
Eliminiamo la classe Class1 creata di default.
Ripetiamo la stessa procedura per gli altri due progetti APP.Data e APP.UI.

Proprietà dei progetti
Selezioniamo ora in "Esplora soluzioni" il progetto PrimiPassi, clicchiamo sulla voce di menù Progetto e quindi su Proprietà.
Nella scheda Applicazione:

Nella scheda Compila assicuriamoci che siano impostati:

Nella scheda Riferimenti:

I riferimenti rappresentano il passaggio obbligato per permettere ad un progetto di interagire e sfruttare le potenzialità messe a disposizione da componenti esterne allo stesso quali possono essere componenti COM, servizi Web XML, assembly o librerie di classi .NET Framework oppure altre librerie di classi.

I riferimenti hanno rappresentato (e lo sono tuttora) l'elemento del NET che più mi incute timore. Il framework mette a disposizione diversi namespace e un mare di funzionalità ma... spesso mi trovo a dovere far fronte ad una nuova esigenza e mi viene naturale chiedermi sotto quale namespace e relativi elementi di programmazione si troverà. E' un pò come cercare un ago in un pagliaio, per chi è agli inizi come me, e debbo dire che, per quanto mi riguarda, la guida del Visual Basic non mi viene quasi mai in aiuto: la trovo fatta malissimo, è a mio avviso l'elemento peggio riuscito del linguaggio di programmazione. I contenuti sono difficili da trovare e quando li si trova (già, quando!) sono a mio avviso confusionari: mille link ad altre risorse correlate e un po' criptici. Cosa digito come chiavi di ricerca? Ho chiaro cosa voglio realizzare ma i criteri di ricerca che mi vengono in mente di utilizzare spesso sono in italiano (o inglese) corrente e raramente portano a trovare qualcosa di utile. Forse tutto questo è dovuto alla struttura ad albero del framework. Una volta mi è capitato di vedere un poster che illustrava la struttura del primo framework: una cartina stradale dettagliata d'Italia è meno articolata e con il tempo, crescendo, si sarà solo complicata. Probabilmente, per ogni voce, un richiamo al ramo principale di appartenenza potrebbe essere utile, con magari anche tutte le "diramazioni" per arrivare a quello che abbiamo cercato. Insomma per arrivare a capire come risolvere in codice una nuova esigenza spesso mi butto su internet e sui vari forum di programmazione. Trovo che mi restituisca dei risultati più gratificanti e in minor tempo. Tutto è naturalmente opinabile e un grosso contributo lo dà anche la mia ignoranza. Se qualcuno in ascolto non si trova d'accordo e ha la voglia e il tempo di scrivere un articolo su come si usa la guida ... beh .. un lettore lo ha già trovato! ;o)

[Diego] Conosco benissimo questa sensazione di panico, di spaesamento. Ma è soltanto una questione di pratica, di perseveranza. Bisogna prendersi il tempo - un vero e proprio investimento - di 'leggere' (solo leggere, non occorre 'studiare') la gerarchia dei vari namespace del Framework (Nel visualizzatore oggetti troviamo l'albero completo di tutte le librerie referenziate, per esempio. Se aggiungiamo un riferimento, troveremo pure quello). Le denominazioni e le collocazioni che sembrano strane alla nostra 'vecchia' conceizone delle entità con cui abbiamo sempre avuto a che fare ci salteranno immediatamente all'occhio e ce ne ricorderemo. Contemporaneamente, acquisiremo una superficiale infarinatura sulla struttura generale e sapremo cercare, per esempio, l'oggetto Device nel namespace Management, piuttosto che l'oggetto Drive nel namespace IO. Quando poi leggiamo nei forum questa o quella risposta, cerchiamo di approfondire la conoscenza dell'oggetto che ci è stato indicato. E' vero che la guida a volte sembra anche troppo dispersiva, con un sacco di collegamenti (che sono insieme la sua forza e il suo tallone d'Achille), ma è sempre la pratica che prima o poi conduce all'informazione cercata. Inoltre, nella guida c'è sempre anche il namespace completo cui pertiene il singolo elemento che abbiamo trovato, e a sinistra c'è tutto l'albero.

Nella scheda Risorse:

Selezioniamo ora in "Esplora soluzioni" il progetto APP.Base, clicchiamo sulla voce di menù Progetto e quindi su Proprietà.
Lasciamo come sono le impostazioni di scheda Applicazione.
Assicuriamoci che nella scheda Compila le impostazioni siano le stesse di PrimiPassi, e che nella scheda Riferimenti sia assente l'importazione di Microsoft.VisualBasic.

Apriamo la pagina delle proprietà del progetto APP.Data.
Lasciamo come sono le impostazioni della scheda Applicazione.
Assicuriamoci che nella scheda Compila le impostazioni siano le stesse di PrimiPassi.
Nella scheda Riferimenti, oltre a togliere l'importazione di Microsoft.VisualBasic, aggiungiamo all'elenco dei riferimenti i progetti di librerie di classe creati in precedenza (APP.Base e APP.UI).

Apriamo la pagina delle proprietà del progetto APP.UI.
Lasciamo come sono le impostazioni della scheda Applicazione.
Assicuriamoci che nella scheda Compila le impostazioni siano le stesse di PrimiPassi.
Nella scheda Riferimenti, oltre a togliere l'importazione di Microsoft.VisualBasic, aggiungiamo APP.Base (dalla scheda Progetti) e System.Windows.Forms (dalla scheda .NET) all'elenco dei riferimenti.

[Diego] In Esplora Soluzioni, se cliccate su 'mostra tutti i file', probabilmente vedete la cartella Risorse 'bianca' (cioè presente ma non inclusa nel progetto) e non 'gialla' (cioè presente anche 'per' il progetto): cliccate su col pulsante destro del mouse e sceglliete il menu 'Includi nel progetto'.
Non seguite l'eventuale wizard di impostazione di connessione al database, cliccando su Annulla.

Conclusione
Con questo articolo, non è ancora teminato lo sviluppo 'generale' del progetto PrimiPassi, ma si può cominciare a rendersi conto della strategia di programmazione che cerchiamo di condividere: si cerca di strutturare la soluzione in modo da dividere progetti e classi a seconda della loro funzionalità.
Nel prossimo articolo si comincerà lo sviluppo di diverse classi accessorie che ci permetteranno di dedicarci con maggior concentrazione al progetto principale.

Il progetto sviluppato fino a questo punto (con codice, database e immagini) è scaricabile dall'area download.