Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Guida al Visual Basic .NET - Scrivere un INI Reader - Parte I

Guida al Visual Basic .NET

Capitolo 62° - Scrivere un INI Reader - Parte I

<< Precedente Prossimo >>

I file INI

Dato che l'esempio di questo capitolo consiste nel realizzare un lettore di file *.ini, è bene spiegare prima, per chi non li conoscesse, come sono fatti e quale è lo scopo di questo tipo di file.
Sono file di sistema contraddistinti dalla dicitura "Impostazioni di Configurazione", poichè tale è la loro funzione: servono a definire il valore delle opzioni di un programma. Nelle applicazioni .NET ci sono altri modo molto più efficienti per raggiungere lo stesso risultato ma li vedremo in seguito. La struttura di un file ini è composta sostanzialmente da due nuclei: campi e valori. I campi sono raggruppamenti concettuali atti a dividere funzionalmente più valori di ambito diverso e sono delimitati da una coppia di parentesi quadre. I valori costituiscono qualcosa di simile alle proprietà delle classi .NET e possono essere assegnati con l'operatore di assegnamento =. Un terzo tipo di elemento è costituito dai commenti, che, come ben si sa, non influiscono sul risultato: questi sono preceduti da un punto e virgola e possono essere sia su una linea intera che sulla stessa linea di un valore. Ecco un esempio:
;Ipotetico INI di un gioco
[General Info]
Name = ProofGame
Version = 1.1.0.2
Company = FG Corporation
Year = 2006

[Run Info]
Diffucult = easy ;difficoltà
Lives = 10 ;numero di vite
Health = 90 ;salute
Level = 20 ;livello 
Il programma di esempio analizzerà il file, rappresentando campi e valori in un grafico ad albero simile a quello che windows usa per rappresentare la struttura gerarchica delle cartelle.


MenuStrip

È il classico menù di windows. Una volta aggiunto al form designer, viene creato uno spazio apposito sotto all'anteprima del form, nel quale appare l'icona corrispondente; inoltre viene visualizzata una striscia grigia sul lato superiore della finestra, ossia l'interfaccia grafica che MenuStrip presenterà a run-time. Per aggiungere una voce, basta fare click su "Type here" e digitare il testo associato; è possibile cancellarne uno premendo Canc o modificarlo cliccandoci sopra due volte lentamente. Ogni sottovoce dispone di eventuali altri sotto-menù personalizzabili all'infinito. Si può aggiungere un separatore, ossia una linea orizzontale, semplicemente inserendo "-" al posto del testo. Ogni elemento così creato è un oggetto ToolStripMenuItem, inserito nella proprietà DropDownItems del menù. Ecco alcune proprietà interessanti:
  • MenuStrip
  • AllowItemReorder : determina se consentire il riordinamento dei menù da parte dell'utente; quest'ultimo potrebbe, tenendo premuto ALT e trascinando gli header, cambiare la posizione delle sezioni sulla barra del MenuStrip
  • Items : collezione di oggetti derivati da MenuItem che costituiscono le sezioni principali del menu'
  • RenderMode : proprietà enumerata che definisce lo stile grafico del controllo. Può assumere tre valori: System (dipende dal sistema operativo), Professional o ManagerRenderMode (stile simile a Microsoft Office)
  • ShowItemToolTips : determina se visualizzare i suggerimenti (tool tip) di ogni elemento
  • TextDirection : direzione del testo, orizzontale, verticale a 90? o a 270?
ToolStripMenuItem
  • AutoToolTip : determina se usare la proprietà Text (True) o ToolTipText (False) per visualizzare i tool tip
  • Checked : determina se il controllo ha la spunta
  • CheckOnClick : specifica sa sia possibile spuntare il controllo con un click
  • CheckState : uno dei tre stati di spunta
  • DisplayStyle : specifica cosa visualizzare, se solo il testo, solo l'immagine, entrambi o nessuno
  • DropDownItems : uguale alla proprietà Items di MenuStrip
  • ShortcutKeyDisplayString : la stringa che determina quale sia la scorciatoia da tastiera per il controllo, che verrà visualizzata a destra del testo (ad esempio "CTRL + D")
  • ShortcutKeys : determina la combinazione di tasti usata come scorciatoria
  • ShowShortcutKeys : determina se visualizzare la scorciatoia da tastiera di fianco al testo
  • TextImageRelation : relazione di posizione tra immagine e testo
  • TooltipText : testo dell'eventuale tool tip
Dopo aver inserito un MenuStrip strMainMenu, una sezione strFile e tre sottosezioni, strOpen, Separatore e strExit, la schermata apparirà così:

MenuStrip.jpg


StatusStrip

La barra di stato, sul lato basso del form, che indica le informazioni aggiuntive o lo stato dell'applicazione. È un contenitore che può includere altri controlli, come label, progressbar, dropdownitem, eccetera. Per ora basta inserire una label, di nome lblStatus, con testo impostato su "In attesa...". Dato che le proprietà sono quasi identiche a quelle di MenuStrip, ecco subito un'anteprima del form con questi due controlli posizionati:

StatusStrip.jpg


ContextMenuStrip

È il menù contestuale, ossia quel menù che appare ogniqualvolta viene premuto il pulsante destro del mouse su un determinato controllo. Per far sì che esso appaia bisogna prima creare un legame tra questo e il controllo associato, impostando la relativa proprietà ContextMenuStrip, comune a tutte le classi derivate da Control. La fase di creazione avviene in modo identico a quanto è già stato analizzato per MenuStrip, e anche l'inserimento delle sottovoci è simile. Non dovreste quindi avere problemi a crearne uno e inserire una voce strClearView, Text = "Pulisci lista".


TreeView

Ecco il controllo clou della lezione, che permette di visualizzare dati in una struttura ad albero. Le proprietà più importanti sono:
  • CheckBoxes: determina se ogni elemento debba avere alla propria sinistra una checkbox
  • FullRowSelect: determina se, quando un elemento viene selezionato, sia evidenziato solo il nome o tutta la riga su cui sta il nome
  • ImageList: specifica quale ImageList è associata al controllo; un'imagelist è una lista di immagini ordinata, ognuna delle quali è accessibile attraverso un indice, come se fosse un arraylist
  • ImageIndex: proprietà che determina l'indice di default di ogni elemento, da prelevare dall'imagelist associata; nel caso la proprietà sia riferita a un elemento, indica quale immagine bisogna visualizzare a fianco dell'elemento
  • Nodes: la proprietà più importante: al pari di Items delle listbox e delle combobox. Contiene una collezione di TreeNode (ossia "nodi d'albero"): ogni elemento Node ha molteplici proprietà e costituisce un'unità dalla quale possono dipartirsi altre unità. Cosa importante, ogni nodo gode di una proprietà Nodes equivalente, la quale implementa la struttura suddetta
  • SelectedNode: restituisce il nodo selezionato
  • ShowLindes: indica se visualizzare le linee che congiungono i nodi
  • ShowPlusMinus: indica se visualizzare i '+' per espandere i nodi contenuti in un elemento e i '-' per eseguire l'operazione opposta
  • ShowRootLindes: determina se visualizzare le linee che congiungono i nodi che non dipendono da niente, ossia le unità dalle quali si dipartono gli altri elementi
In una TreeView, ogni elemento è detto appunto nodo ed è rappresentato dalla classe TreeNode: ogni nodo può a sua volta dipartirsi in più sotto-elementi, ulteriori nodi, in un ciclo lungo a piacere. Gli elementi che non derivano da nulla se non dal controllo stesso sono detti roots, radici. Allo stesso modo delle cartelle e dei file del computer, ogni nodo può essere indicato con un percorso di formato simile, dove i nome dei nodi sono separati da "". La proprietà di TreeNode non sono niente di speciale o innovativo: sono già state tutte analizzate, o derivate da Control. Ecco come appare l'interfaccia, dopo aver aggiunto una TreeView trwIni con Dock = Fill e un ContextMenuStrip cntTreeView ad essa associato:

IniReader.jpg


<< Precedente Prossimo >>
A proposito dell'autore

C#, TypeScript, java, php, EcmaScript (JavaScript), Spring, Hibernate, React, SASS/LESS, jade, python, scikit, node.js, redux, postgres, keras, kubernetes, docker, hexo, etc...