i controlli in vb - cefi.it telematico/dispense/progreg/dispense44.pdf · 5 corso di programmazione...
TRANSCRIPT
1
Corso di Programmazione Cefi Informatica
I CONTROLLI IN VB.NET
VB.NET
Corso di Programmazione Cefi Informatica
Questi controlli sono liste con stile visuale proprio in grado di contenere elementi. La
gestione di tali elementi è molto simile a quella degli ArrayList. L'unica differenza sta
nel fatto che in questo caso, tutte le modifiche vengono rese visibili sull'interfaccia e
influiscono, quindi, su ciò che l'utente può vedere. Una volta aggiunte alla windows
form, il loro aspetto sarà simile a questo:
ListBox e ComboBox
2
Corso di Programmazione Cefi Informatica
ListBox e ComboBox
Corso di Programmazione Cefi Informatica
� ColumnWidth : indica la larghezza delle colonne in una listbox in cui MultiColumn
= True. Lasciare 0 per il valore di default
� HorizontalExtent : indica di quanti pixel è possibile scorrere la listbox in
orizzontale, se la scrollbar orizzontale è attiva
� HorizontalScrollbar : determina se attivare la scrollbar orizzontale. Di solito,
questa proprietà viene impostata a True quando la listbox dispone di più colonne
� MultiColumn : determina se la listbox è a più colonne. In questa modalità, una
volta terminata l'altezza della lista, gli elementi vengono posizionati di lato anzichè
sotto, ed è quindi possibile visualizzarli spostandosi a destra o a sinistra. Un esempio
visuale:
Proprietà della ListBox
3
Corso di Programmazione Cefi Informatica
ListBox MultiColonna
Corso di Programmazione Cefi Informatica
� ScrollAlwaysVisible : determina se le scrollbar vengono visualizzate sempre,
indipendentemente dal numero di elementi presenti. Infatti quando questa proprietà è
disabilitata, se gli elementi sono pochi e possono essere posizionati nell'area della lista
senza nasconderne nessuno, non viene visualizzata la scrollbar, che appare quando gli
elementi cominciano a diventare troppi. Con questa proprietà attiva, essa è sempre
visibile e, se inutilizzata, si disabilita automaticamente
� SelectionMode : proprietà enumerata che determina in quale modo sia possibile
selezionare gli elementi. Può assumere quattro valori: None (non è possibile
selezionare niente), One (un solo elemento alla volta), MultiSimple (più elementi
selezionabili con un click), MultiExtended (più elementi, selezionabili solo tenendo
premuto Ctrl e spostando il mouse sopra di essi)
Proprietà della ListBox
4
Corso di Programmazione Cefi Informatica
� DropDownHeight : determina l'altezza, in pixel, del menù a discesa
� DropDownStyle : determina lo stile del menù a discesa. Può assumere tre valori:
Simple (il menù a discesa è sempre visibile, e può essere assimilato a una listbox),
DropDown (stile normale come nell'immagine di esempio proposta a inizio capitolo,
ma è possibile modificare il testo dell'elemento selezionato scrivendo entro la casella),
DropDownList (stile normale, non è possibile modificare l'elemento selezionato in
alcun modo, se non selezionandone un altro). Questa è un'immagine di una combobox
con DropDownStyle = Simple:
Proprietà della ComboBox
Corso di Programmazione Cefi Informatica
� FlatStyle : lo stile visuale della ComboBox. Può assumere quattro valori: Flat o
Popup (la combobox è grigia e schiacciata, senza contorni 3D), System o
Professional (la combobox è azzurra e rilevata, con contorni 3D)
� MaxDropDownItems : il numero massimo di elementi visualizzabili nel menù a
discesa
� MaxLength : determina il massimo numero di caratteri di testo che possono
essere inseriti come input nella casella della combobox. Questa proprietà ha senso
solo se DropDownStyle non è impostata su DropDownList, poichè tale stile impedisce
di modificare il contenuto della combobox tramite tastiera, come già detto.
Proprietà della ComboBox
5
Corso di Programmazione Cefi Informatica
� FormatString : dato che queste liste possono contenere anche numeri e date (e
altri oggetti, ma non è consigliabile aggiungere tipi diversi da quelli base), la proprietà
FormatString indica come tali valori debbano essere visualizzati. Cliccando sul
pulsante con i tre puntini nella finestra delle proprietà su questa voce, apparirà una
finestra di dialogo con i seguenti formati standard: No Formatting, Numeric,
DateTime e Scientific.
� FormatEnabled : determina se è abilitata la formattazione degli elementi tramite
FormatString
Proprietà della ComboBox e della ListBox
Corso di Programmazione Cefi Informatica
� IntegralHeight : quando attiva, questa proprietà forza la lista ad assumere un
valore di altezza (Size.Height) che sia un multiplo di ItemHeight, in modo tale che gli
elementi siano sempre visibili interamente. Se disattivata, gli elementi possono anche
venire "tagliati" fuori dalla lista. Un esempio:
Proprietà della ComboBox e della ListBox
6
Corso di Programmazione Cefi Informatica
� ItemHeight : altezza, in pixel, di un elemento
� Items : collezione di tutti gli elementi. Gode di tutti i metodi consueti delle liste,
quali Add, Remove, IndexOf, Insert, eccetera...
� Sorted : indica se gli elementi devono essere ordinati alfabeticamente
Proprietà della ComboBox e della ListBox
Corso di Programmazione Cefi Informatica
Il controllo NumericUpDown
Questo controllo torna utile quando si vuole proporre all'utente una scelta di un numero,
intero o decimale, compreso tra un minimo e un massimo. Ad esempio, il semplice
programma che verrà illustrato chiede di indovinare un numero casuale da 0 a 100
generato dal computer. Con l'uso di una textbox, l'utente potrebbe commettere un
errore di battitura e inserire in input caratteri non validi, mandando così in crash il
programma: la soluzione potrebbe essere usare un Try, ma si sprecherebbe spazio. La
soluzione ideale sarebbe fare uso di NumericUpDown. Le proprietà caratteristiche:
7
Corso di Programmazione Cefi Informatica
Le proprietà di NumericUpDown
� DecimalPlaces : i posti decimali dopo la virgola. Se impostata a 0, sarà possibile immettere solo numeri interi
� Hexadecimal : determina se visualizzare il numero in notazione esadecimale (solo per numeri interi positivi)
� Increment : il fattore di incremento/decremento automaticamente aggiunto/sottratto
quando l'utente clicca sulle frecce del controllo
� InterceptArrowKey : determina se il controllo debba intercettare e interpretare la pressione delle frecce
direzionali su/giù da testiera
� Maximum : massimo valore numerico
� Minimum : minimo valore numerico
� ThousandSeparator : indica se visualizzare il separatore delle migliaia
� Value : il valore indicato
� UpDownAlign : la posizione delle frecce sul controllo
Corso di Programmazione Cefi Informatica
Esempio di NumericUpDown
Dopo aver posizionato questi controlli:
• Una Label Label1, Text = "Clicca Genera per generare un numero casuale, quindi
prova a indovinare!"
• Un pulsante cmdGenerate, Text = "Genera"
• Un pulsante cmdTry, Text = "Prova"
• Un NumericUpDown nudValue, con le proprietà standard
• Una Label lblNumber, Text = "***", Font = Microsoft Sans Serif Grassetto 16pt,
AutoSize =False, TextAlign = MiddleCenter
8
Corso di Programmazione Cefi Informatica
Esempio
Corso di Programmazione Cefi Informatica
Esempio (1/3)
9
Corso di Programmazione Cefi Informatica
Esempio (2/3)
Corso di Programmazione Cefi Informatica
Esempio (3/3)
10
Corso di Programmazione Cefi Informatica
Questi controlli servono a
visualizzare delle finestre
di dialogo che aiutino
l'utente a scegliere uno o
più files da aprire o
salvare.La loro interfaccia
è simile a questa:
OpenFileDialog e SaveFileDialog
Corso di Programmazione Cefi Informatica
� AddExtension : se il nome del file da aprire/salvare non ha un estensione, il controllo
l'aggiunge automaticamente sulla base della proprietà DefaultExt o Filter
� CheckFileExists : controlla se il file selezionato esista
� CheckPathExists : controlla se la cartella selezionata esista
� DefaultExt : l'estenzione predefinita su cui si basa la proprietà AddExtension
� FileName : il nome del file visualizzato di default nella textbox del controllo, e
modificato dopo l'interazione con l'utente
� Filter : la proprietà più importante dopo FileName. Serve a definire quali tipi di file
siano visualizzati dal controllo.
Le proprietà
11
Corso di Programmazione Cefi Informatica
Nella finestra di dialogo, infatti, come mostra l'immagine sopra riportata, poco sotto
alla textbox contenente il nome del file, c'è una combobox che permette di selezionare
il "filtro", per l'appunto, ossia quali estensioni prendere in considerazione (nell'esempio
"File di testo", con estensione *.txt, quella che si prenderà in esame nell'esempio). Ci
sono delle regole standard per la costruzione della stringa che deve essere passata a
questa proprietà. Il formato corretto è:
Descrizione file|*.estensione1;*.estensione2|Descrizi one file|...
Le proprietà
Corso di Programmazione Cefi Informatica
Se, quindi, si volessero visualizzare solo file multimediali, divisi in musica e video,
questo sarebbe il valore di Filter:
"Musica|*.mp3;*.wav;*.wma;*.ogg;*.mid|Video|*.mpg;*.mp4;*.wmv;*.avi". Per i file di
testo "File di testo|*.txt" e per tutti i file "Tutti i file|*.*"
� InitialDirectory: la cartella iniziale predefinita
� MultiSelect: se vero, si potranno selezionare più file (creando un riquadro col
puntatore o selezionandoli manualmente uno ad uno tenendo premuto Ctrl)
� Title: il titolo della finestra di dialogo
� ValidatesName: controlla che i nomi dei file non contengano caratteri vietati
� OverWritePrompt: (solo per SaveFileDialog) controlla se il file selezionato ne
sovrascrive un altro e chiede se procedere o no
Le proprietà
12
Corso di Programmazione Cefi Informatica
FolderBrowserDialog
Corso di Programmazione Cefi Informatica
Permette di scegliere una cartella mediante un menù di navigazione nelle directory del computer,
completamente automatico. Le proprietà fondamentali di questo controllo sono:
� Description: una breve descrizione della cartella che si deve selezionare, al fine
puramente esplicativo per l'utente, che verrà visualizzata in cima alla finestra di dialogo
� RootFoler: indica qual è la cartella da cui si inizia la navigazione del menù, mediante un
enumeratore
� SelectedPath: indica la directory selezionata quando viene visualizzata la finestra di
dialogo
� ShowNewFolderButton: determina se deve essere visualizzato il pulsante che permette di
creare nuove cartelle al momento
Una volta che la finestra di dialogo sarà chiusa, la cartella scelta sarà disponibile sottoforma di
stringa mediante la proprietà SelectedPath.
FolderBrowserDialog
13
Corso di Programmazione Cefi Informatica
FontDialog
Corso di Programmazione Cefi Informatica
Semplice finestra di dialogo che permette di scegliere il font (carattere) con cui scrivere
su un controllo. Se, ad esempio, avessimo un editor di testo, potremmo far scegliere
all'utente, con questo controllo, con quale carattere scrivere. La procedura ShowDialog()
(che è comune a tutte le finestre di dialogo) permetter di visualizzare la finestra di scelta
del carattere, personalizzabile con molte opzioni. Infine, la proprietà Font conterrà il tipo
di font scelto, sotto forma di una proprietà di tipo complesso System.Drawing.Font: in
genere tutti i controlli godono di questa proprietà, quindi è sufficiente scrivere una cosa
del genere per cambiare il font di un controllo:
[controllo].Font = FontDialog.Font
FontDialog
14
Corso di Programmazione Cefi Informatica
Le proprietà principali:
� AllowSimulation : se vero, viene visualizzata un'anteprima del font
� Color: il colore selezionato di default
� Font: il font selezionato di default
� FontMustExists: se vero, controlla l'esistenza del font nella cartella C:\WINDOWS\Fonts
� MaxSize: la massima grandezza (in punti) del font: lasciare 0 per quella preimpostata
� MinSize: la minima grandezza (in punti) del font: lasciare 0 per quella preimpostata
� ShowColor: determina se visualizzare anche la scelta del colore
� ShowEffects: determina se visualizzare anche gli stili di formattazione barrato,
grassetto, sottolineato e corsivo
Proprietà
Corso di Programmazione Cefi Informatica
Il controllo DateTimePicker
Ci sono due proprietà importanti per questo controllo:
� Format : La prima permette di definire il formato del controllo; è rappresentata da un
enumeratore che può assumere quattro valori
1. Long : data in formato esteso
2. Short : data in formato breve
3. Time : ora in formato esteso
4. Custom : personalizzato.
� CustomFormat: Questa proprietà (è una stringa) viene utilizzata nel caso in cui
viene usato l’opzione Custom. Nella stringa si possono presenziare queste
sequenze di caratteri:
15
Corso di Programmazione Cefi Informatica
d : giorno del mese, con una o due cifre a seconda dei casi
dd : giorno del mese, sempre con due cifre (vengono aggiunti zeri sulla sinistra nel
caso manchino posti)
ddd : giorno della settimana, abbreviato a tre caratteri secondo la cultura corrente
dddd : giorno della settimana, con nome completo
M : mese, con una o due cifre a seconda dei casi
MM : mese, sempre con due cifre
MMM : nome del mese, abbreviato a tre caratteri secondo la cultura corrente
MMMM : nome completo del mese
y : anno, con una o due cifre a seconda dei casi
yy : anno, sempre con due cifre
Il controllo DateTimePicker
Corso di Programmazione Cefi Informatica
yyyy : anno, a quattro cifre
H : ora, in formato 24 ore con una o due cifre
HH : ora, in formato 24 ore con due cifre
h : ora, in formato 12 ore, con una o due cifre
hh : ora, in formato 12 ore, con due cifre
m : minuti, con una o due cifre
mm : minuti, con due cifre
s : secondi, con una o due cifre
ss : secondi, con due cifre
f : frazioni di secondo (un numero qualsiasi da uno a sette di "f" consecutive
corrisponde ad altrettanti decimali)
Il controllo DateTimePicker
16
Corso di Programmazione Cefi Informatica
Esempio
Data.CustomFormat = "dddd d MMMM ,ore HH:mm“
Data.Format = DateTimePickerFormat.Custom
Dove Data è il nome del controllo DateTimePicker
La data viene visualizzata con questo formato:
[nome giorno] [giorno] [nome mese] [anno], ore
[ora]:[minuti ]
Corso di Programmazione Cefi Informatica
In fase di progettazione, se si vogliono aggiungere immagini a controlli come Button,
Label, SplitButton, ToolBox e simili è sufficiente selezionare la proprietà Image,
aprire la finestra di dialogo mediante pressione sul pulsante che appare, scegliere
quindi un file immagine dall'Hard Disk o dalle risorse del progetto, e confermare la
scelta per ottenere un effetto ottimo. Tuttavia, ciò non è sempre possibile; ad
esempio se a run-time si vogliono associare determinate icone a elementi di una lista
che non è possibile prevedere durante la stesura del codice. In situazioni simili, il
controllo che viene in aiuto del programmatore si chiama ImageList . Esso
costituisce una lista, ordinata secondo indici e chiavi, che contiene immagini
precedentemente caricate dallo sviluppatore: tutte queste vengono ridimensionate
secondo una dimensione fissata del controllo e hanno una limitazione di profondità di
Il controllo ImageList
17
Corso di Programmazione Cefi Informatica
colore, sempre predeterminata, da 8 a 32 bit. Per ottenere effetti di grande impatto, è
consigliabile utilizzare formati come il Portable Network Graphics (*.png) , oppure il
JPEG (*.jpg) se si vuole risparmiare spazio pur conservando una discreta qualita'; il
formato ideale è 32x32 pixel per le icone grandi e 22x22 o 16x16 in quelle piccole
come nei menù a discesa o nelle ListView a dettagli. Ogni controllo con interfaccia che
sia associato al controllo ImageList , dispone di una proprietà ImageList, che deve
essere impostata di conseguenza a seconda della lista di immagini che si vuole quel
controllo possa utilizzare. Successivamente, i singoli elementi al suo interno sono
dotati delle proprietà ImageIndex e ImageKey, che permettono di associarvi
un'immagine prelevandola mediante l'indice o la chiave impostata.
Il controllo ImageList
Corso di Programmazione Cefi Informatica
ImageList su ListView
18
Corso di Programmazione Cefi Informatica
ImageList su TreeView
Corso di Programmazione Cefi Informatica
ImageList su TabControl
19
Corso di Programmazione Cefi Informatica
La ListView è un controllo complesso e di grande impatto visivo. È lo stesso tipo di
lista usato dall'explorer di windows per visualizzare files e cartelle. Le sue proprietà
permettono di personalizzarne la visualizzazione in cinque stili diversi: i più importanti
di questi sono Large Icone (Icone grandi), Small Icon (Icone piccole) e Details
(Dettagli). Ci sono poi anche Tile e List, ma vengono usati meno spesso. Ecco alcuni
esempi:
Il controllo ListView
Corso di Programmazione Cefi Informatica
ListView Large IconListView Large Icon
20
Corso di Programmazione Cefi Informatica
ListView Small Icon
Corso di Programmazione Cefi Informatica
ListView Details
21
Corso di Programmazione Cefi Informatica
� CheckBoxes : indica se la listview debba visualizzare delle CheckBox vicino ad ogni
elemento
� Columns : collezione delle colonne disponibili. Ogni colonna è contraddistinta da un testo
(Text), un indice d'immagine (ImageIndex) e un indice di visualizzazione (DisplayIndex)
che specifica la sua posizione ordinale nella visualizzazione. Le colonne sono visibili sono
con View = Details
� FullRowSelect : indica se evidenziare tutta la riga o solo il primo elemento, quando View
= Details
� GridLines : indica se visualizzare le righe della griglia, quando View = Details
� Groups : collezione dei gruppi disponibili
� HeaderStyle : specifica se le intestazioni delle colonne possano essere cliccate o meno
Il controllo ListView , le proprietà (1/3)
Corso di Programmazione Cefi Informatica
� HideSelection : specifica se la listview debba nascondere la selezione quando
perde il Focus, ossia quando un altro controllo diventa il controllo attivo
� HotTracking : abilita gli elementi ad apparire come collegamenti ipertestuali quando
il mouse ci passa sopra
� HoverSelection : se impostata su True, sarà possibile selezionare un elemento
semplicemente spostandoci sopra con il mouse
� Items : collezione degli elementi della listview
� LabelEdit : specifica se sia possibile modificare il testo dei SubItems da parte
dell'utente, quando View = Details
Il controllo ListView , le proprietà (2/3)
22
Corso di Programmazione Cefi Informatica
� LargeImageList : ImageList per View = Large Icon / Tile / List
� MultiSelect : indica se si possano selezionare più elementi contemporaneamente
� ShowGroups : determina se visualizzare i gruppi
� ShowItemToolTips : determina se visualizzare i ToolTips dei rispettivi elementi
� SmallIconList : ImageList per View = Small Icon / Details
�Sorting : il tipo di ordinamento, se alfabetico ascendente o discendente.
Il controllo ListView , le proprietà (3/3)
Corso di Programmazione Cefi Informatica
Ogni elemento della ListView è contraddistinto da un oggetto ListViewItem . Poichè la
ListView è compatibile con l'ImageList, tutti i membri della collezione Items sono in
grado di impostare l'indice d'immagine associato, come detto precedentemente.
Inoltre, sempre manipolando le proprietà, si può attribuire ad ogni elemento un testo,
un font, un colore diverso a seconda delle necessità. Nella visualizzazione a dettagli
si possono impostare tutti i valori corrispettivi ad ogni colonna mediante la proprietà
SubItems , la quale contiene una collezione di oggetti ListViewSubItem: di questi è
possibile modificare il font e il colore, oltre che il testo.
ListViewItem
23
Corso di Programmazione Cefi Informatica
Un gruppo è un insieme di elementi raggruppati sotto la stessa etichetta. I gruppi
vengono aggiunti alla lista utilizzando l'apposita proprietà Groups e ogni elemento può
essere assegnato ad un gruppo con la stessa proprietà (ListViewItem.Group). Oggetti
di questo tipo godono di poche caratteristiche: solo il testo ed il nome sono modificabili.
Prima di procedere con ogni operazione, però, bisogna assicurarsi che la proprietà
ShowGroups della ListView sia impostata a True
Ecco un esempio di codice:
ListViewGroup
Corso di Programmazione Cefi Informatica
'Nuovo gruppoDim G As New ListViewGroup("Testo esplicativo")
'Nuovo elementoDim L As New ListViewItem("Elemento")
'Aggiunge il gruppo alla listviewListView1.Groups.Add(G)
'Setta il gruppo a cui L apparterràL.Group = G
'Aggiunge l'elemento alla listaListView1.Items.Add(L)
Esempio
24
Corso di Programmazione Cefi Informatica
La ListView a dettagli è la versione più complessa di questo controllo, ed è
contraddistinta dalla classica visualizzazione a colonne. Ogni colonna viene
determinata in fase di sviluppo o a run-time agendo sulla collezione Columns nelle
proprietà della lista e bisogna ricordare l'ordine in cui le colonne vengono inserite
poichè questo influisce in maniera significativa sul comportamento dei SubItems.
Infatti il primo SubItem di un ListViewItem andrà sotto la prima colonna, quella con
indice 0, il secondo sotto la seconda e così via. Un errore di ordine potrebbe produrre
quindi, risultati sgradevoli. Viene visualizzato un esempio per calcolare la spesa totale
conoscendo i singoli prodotti e le singole quantità di una lista della spesa. Ecco
un'anteprima di come dovrebbe apparire la finestra:
La ListView a dettagli
Corso di Programmazione Cefi Informatica
Anteprima esempio
25
Corso di Programmazione Cefi Informatica
Tutti conoscono benissimo
l'interfaccia di Microsoft Word, dove
sopra lo spazio in cui si scrive ci
sono molte icone, ognuna con la
propria funzione (Salva, Apri,
Nuovo, Copia, Incolla ecc...): la
barra degli strumenti, così
chiamata, dove sono collocate
quelle icone è una ToolStrip . Ecco
osservare un esempio di toolstrip
creata con vb.net:
Il controllo ToolStrip
Corso di Programmazione Cefi Informatica
Le proprietà principali di una toolstrip:
� ImageScalingSize: molto importante, determina di che dimensione saranno le
immagini della toolstrip; per impostarle della dimensione di quelle di Word si lasci pure
16;16 (16x16), mentre per farla apparire con la stessa dimensione di quelle in immagine
un 24;24 è accettabile (consiglierei di non andare troppo oltre)
� Items: l'insieme degli elementi della toolstrip; ciò che si può mettere nella toolstrip è
un piccolo gruppo di controlli normalissimi, già analizzati, ossia: Button (un normale
pulsante: nell'immagine, Testi e Cronologia sono Button); DropDownItems (menù a
discesa, identico a MenuStrip: nell'immagine Documenti è un dropdownitem);
Il controllo ToolStrip
26
Corso di Programmazione Cefi Informatica
SplitButton (una fusione tra button e dropdownitems, poichè gode di un evento click
pur essendo una lista a discesa); Label (una normalissima etichetta di testo:
nell'immagine Nome è una label); TextBox (casella di testo: nell'immagine il testo
"Nicolo'" contenuto in una textbox); ComboBox (lista a cascata: nell'immagine è il
primo controllo della seconda riga); ProgressBar (ultimo controllo); Separator (un
separatore, ossia una barra verticale che separa gli elementi: nell'immagine è
presente fra Documenti e Nome)
� TextDirection: direzione del testo
Il controllo ToolStrip
Corso di Programmazione Cefi Informatica
TabControl è un controllo formato da più schede sovrapposte, ognuna delle quali
contiene al proprio interno una interfaccia diversa. Questo controllo, infatti, insieme a
GroupBox, SplitPanel e pochi altri, è un contenitore creato appositamente per ordinare
più controlli, in questo caso c'è la possibilità di stipare una enorme quantità di layout in
poco spazio: ogni scheda (Tab) è accessibile con un click e cambia l'interfaccia
visualizzata .
A seconda della proprietà Appearance, TabControl può presentarsi sotto tre vesti
grafiche :Normal , Buttons e FlatButtons. Per inserire uno o più controlli all'interno
di una scheda è sufficiente trascinarli con il mouse oppure aggiungerli da codice
facendo riferimento alla proprietà TabPages. Ecco la lista delle proprietà più
rilevanti:
Il controllo Tabcontrol
27
Corso di Programmazione Cefi Informatica
� Appearance : lo stile di visualizzazione
� ItemSize : la dimensione dell'intestazione delle schede
� Multiline : se impostato su True, qualora le schede fossero troppe, verranno
visualizzate diverse file di header una sopra all'altra; altrimenti appariranno due
pulsantini a mò di scrollbar che permetteranno di scorrerle orizzontalmente. Nel primo
caso, la proprietà in sola lettura RowCount restituisce il numero di righe visualizzate
� TabPages : collezione di tutte le schede disponibili sotto forma di oggetti TabPage
Per portare in primo piano una scheda è possibile richiamare da codice il metodo
TabControl.SelectTab(Index), passando come unico parametro l'indice della scheda da
rilevare, o, in alternativa, tutto l'oggetto TabPage.
Proprietà del controllo Tabcontrol
Corso di Programmazione Cefi Informatica
Senza alcun dubbio, DataGridView è il controllo per eccellenza nell'immagazzinamento
di dati, in particolar modo quelli estratti dai database, la cui gestione è assai frequente
lavorando con il Visual Basic. L'interfaccia tipica è questa:
Il controllo DataGridView
28
Corso di Programmazione Cefi Informatica
In ogni casella è possibile inserire anche elementi diversi dal puro e semplice testo: in
particolare, solo in fase di sviluppo si possono scegliere colonne che implementino il
comportamento di chexkbox, combobox, button, picturebox e linklabel. Tuttavia, spesso
le colonne mutano spontaneamente stile per adattarsi al tipo di valore inserito (ad
esempio, inserire un valore booleano provocherà l'apparire di una checkbox). Eccone le
proprietà e i metodi più interessanti:
� AllowUserTo, AddRows, DeleteRows, OrderColumns, ResizeC olumns,
ResizeRows : una serie di proprietà booleane che determinano se l'utente sia o meno in
grado di aggiungere o rimuovere righe, ordinare le colonne o ridimensionare sia le righe
che le colonne
Proprietà del controllo DataGridView (1/5)
Corso di Programmazione Cefi Informatica
� AutoResize ... : una serie di procedure che permettono di ridimensionare una
determinata colonna o riga, o intestazione affinchè si adatti al suo nuovo contenuto
� ClearSelection: deseleziona tutte le celle selezionate
� ColumnCount / RowCount: determina il numero iniziale di colonne o righe
visualizzate sul controllo
� ColumnHeaders / RowHeaders: imposta lo stile di visualizzazione, i bordi, le
dimensioni e la visibilità delle intestazioni
� Columns: insieme di tutte le colonne del controllo. Tramite questa proprietà è
possibile determinare quali siano i tipi di valori che si possono immettere in una cella.
Proprietà del controllo DataGridView (2/5)
29
Corso di Programmazione Cefi Informatica
Nella finestra di dialogo durante la scrittura del programma, infatti, quando si
aggiunge una colonna non a runtime, viene anche chiesto quale debba essere il suo
tipo, proponendo una gamma abbastanza ampia di possibilità (textbox, combobox,
checkbox, image, button, linklabel). Non possibile stabilire il tipo di colonna da codice
� CurrentCell: imposta o restituisce la cella selezionata
� CurrentCellAddress: restituisce due coordinate sotto forma di Point che indicano
la colonna e la riga della cella selezionata
� Item(x,y): restituisce la cella alle coordinate x e y (colonna e riga). La sua
proprietà più importante è Value, che restituisce o imposta il valore contenuto nella
cella, che può essere un testo, un valore booleano, una combobox eccetera
Proprietà del controllo DataGridView (3/5)
Corso di Programmazione Cefi Informatica
� MultiSelect: determina qualora sia possibile selezionare più celle, colonne o righe
insieme
� ReadOnly : determina se l'utente possa o meno modificare i contenuto delle celle
� SelectionMode : proprietà enumerata che indica come debba avvenire la
selezione. Può assumere 5 valori: CellSelect (solo la cella), FullRowSelect (tutta la
riga), FullColumnSelect (tutta la colonna), RowHeaderSelect (solo l'intestazione
della riga) o ColumnHeaderSelect (solo l'intestazione della colonna)
� ShowCellToolTip : indica se visualizzare il tooltip della cella
� ShowEditingIcon : indice se visualizzare l'icona di modifica
Proprietà del controllo DataGridView (4/5)
30
Corso di Programmazione Cefi Informatica
�Sort(a, b): utilissima procedura che ordina la colonna a della datagridview secondo
un ordine ascendente o discendente definito da un enumeratore di tipo
ComponentModel.ListSortDirection
� Selected Cells, Columns, Row: tre collezioni che restituiscono un insieme di tutte
le celle, colonne o righe selezionate
Proprietà del controllo DataGridView (5/5)
Corso di Programmazione Cefi Informatica
Il tipo DataTable è la rappresentazione astratta del controllo visuale appena esposto.
Serve per immagazzinare dati, al pari di ArrayList o HashTable, ma la logica è del
tutto diversa. I valori vengono infatti memorizzati all'interno di una tabella, formata da
un certo numero di righe e colonne, modificabili in ogni maniera. Le righe sono
subordinate alle colonne, poichè devono presentare un numero di celle (assimilabili
quindi ai SubItems della ListView Details) pari a quello delle colonne: per questo
motivo il tipo DataRow non presenta alcun costruttore, ma deve essere generato
dalla funzionefactory NewRow() appartenente a DataTable. Ecco un semplice
esempio di codice che riempie una tabella di 1 riga x 2 colonne:
Il DataTable
31
Corso di Programmazione Cefi Informatica
'Dichiara una nuova DataTableDim t As New DataTable'Dichiara una nuova riga di DataTable'ATTENZIONE! Questa classe NON presenta alcun costruttore perchè non si è a‘conoscienza a priori di quante saranno le colonne!
Dim r As DataRow'Dichiara un nuovo array di DataColumn, ciascuna delle quali contiene il nomedell'intestazione immaginaria della colonna e quindi la sua "key"
Dim c() As DataColumn = {New DataColumn("Nome"), New DataColumn("Cognome")}'Aggiunge le colonne alla tabella. Il metodo AddRange non accetta un singolo elemento bensì un array di elementi
t.Columns.AddRange(C)
Esempio (1/2)
Corso di Programmazione Cefi Informatica
'Inizializza una nuova riga ora che si sa quali e quante sono le colonner = t.NewRow()
'Riempie i campi necessari impostando la proprietà Item e usando come indice la‘stringa che si era impostato come intestazione prima
r.Item("Nome") = "Caio"r.Item("Cognome") = "Sempronio"'Dopo aver completato la riga, la aggiunget.Rows.Add®
Esempio (2/2)
32
Corso di Programmazione Cefi Informatica
Con il controllo DataGridView e alcuni altri è possibile eseguire un binding dei dati,
ossia legare una determinata fonte di dati all'oggetto in modo tale che visualizzi il
contenuto della fonte. È possibile ottenere gli stessi risultati in modi differenti. Qui
vengono spiegati due: il legame per classe e quello per tabella.
Nel primo si costruisce una classe che esponga tutti i campi che si desidera vengano
riportati nella DataGridView come proprietà pubbliche facendo particolare attenzione
nel sceglierne i nomi, dato che questi verranno utilizzati come intestazioni della
colonna. Dopo aver raccolto gli oggetti necessari in un qualche tipo di collezione (list o
array vanno benissimo), si imposta la proprietà DataSource su questa collezione e,
per magia, il controllo viene popolato con tutti i dati immessi:
Il Binding
Corso di Programmazione Cefi Informatica
Public Class clsUtenteDim _Nome, _Cognome As StringDim _Sposato As Boolean
Public Property Nome() As StringGet
Return _NomeEnd GetSet(ByVal value As String)
_ Nome = valueEnd Set
End PropertyPublic Property Cognome() As String
GetReturn _Cognome
End Get
Esempio (1/3)
33
Corso di Programmazione Cefi Informatica
Set(ByVal value As String)_Cognome = value
End SetEnd PropertyEnd Class'...Dim arr(1) As clsUtentearr(0) = New clsUtenteWith arr(0).Cognome = "Sempronio".Nome = "Tizio"
. Sposato = TrueEnd Witharr(1) = New clsUtente
Esempio (2/3)
Corso di Programmazione Cefi Informatica
With arr(1)
. Cognome = "Pallino"
.Nome = "Pinco"
.Sposato = False
End With
D.DataSource = arr
'Ridimensiona le colonne così che il testo delle celle si possa leggere interamente
D.AutoResizeColumns()
Con DataTable, il meccanismo è lo stesso, ma è più semplice disporre i valori,
poichè DataTable lavora in modo parallelo a DataGridView
Esempio (3/3)
34
Corso di Programmazione Cefi Informatica
Esiste un’altra proprietà del controllo DataGridView, DataMember . Può accadere,
infatti, che il programma utilizzi dei DataSet (che sono comunque i casi più frequenti).
Tali tipi di oggetti sono in grado di raggruppare al proprio interno anche più DataTable,
accessibili tramite la proprietà Tables : se DataSource viene impostata su un DataSet,
il programma non saprebbe quale tabella prelevare tra tutte quelle disponibili. A
questo punto entra in scena DataMember, che viene impostato sul riferimento della
tabella scelta. Ad esempio:
Dim D As DataSet'...'La fonte di dati è il DataSetgrid.DataSource = D‘Ma vengono visualizzati solo quelli provenienti dalla sec onda tabella disponibilegrid.DataMember = D.Tables(1)
La proprietà DataMember