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 - I Controlli

Guida al Visual Basic .NET

Capitolo 54° - I Controlli

<< Precedente Prossimo >>

 

La base delle applicazioni Windows Form

Se gli eventi sono il principale meccanismo con cui scrivere un'applicazione visuale, i controlli sono i principali oggetti da usare. Formalmente, un controllo non è altro che una classe derivata da System.Windows.Forms.Control. In pratica, esso rappresenta un qualsiasi componente dell'interfaccia grafica di un programma: pulsanti, menù, caselle di testo, liste varie, e anche le finestre, sono tutti controlli. Per questa ragione, se volete creare una GUI (Graphical User Interface) per il vostro applicativo, dovrete necessariamente conoscere quali controlli le librerie standard vi mettono a disposizione (e questo avviene in tutti i linguaggi che supportino librerie visuali). Conoscere un controllo significa principalmente sapere quali proprietà, metodi ed eventi esso possiede e come usarli.
Una volta aperto il progetto Windows Form, troverete che l'IDE ha creato per noi la prima Form, ossia la prima finestra dell'applicazione. Essa sarà la prima ad essere aperta quando il programma verrà fatto correre e, per i prossimi capitoli, sarà anche l'unica che useremo. L'esecuzione termina automaticamente quando tale finestra viene chiusa. Come avrete visto, inoltre, tra le meravigliose funzionalità del nostro ambiente di sviluppo c'è anche un'area grafica - detta Designer - che ci permette di vedere un'anteprima della Form e di modificarla o aggiungerci nuovi elementi. Per modificare l'aspetto o il comportamento della Form, è sufficiente modificare le relative proprietà nella finestra delle proprietà

FormProperties.jpg
Mentre per aggiungere elementi alla superficie libera della finestra, è sufficiente trascinare i controlli desiderati dalla toolbox nel designer. La toolbox è di solito nascosta e la si può mostrare soffermandosi un secondo sulla linguetta "Toolbox" che spunta fuori dal lato sinistro della schermata dell'IDE:

Toolbox.jpg

La classe Control

La classe Control è la classe base di tutti i controlli (ma non è astratta). Essa espone un buon numero di metodi e proprietà che vengono ereditati da tutti i suoi derivati. Tra questi membri di default, sono da ricordare:

  • AllowDrop : specifica se il controllo supporta il Drag and Drop (per ulteriori informazioni su questa tecnica, vedere capitolo relativo);
  • Anchor : proprietà enumerata codificata a bit (vedi capitolo sugli enumeratori) che permette di impostare a quali lati del form i corrispondenti lati del controllo restano "ancorati" durante il processo di ridimensionamento. Dire che un un controllo è ancorato a destra, per esempio, significa che il suo lato destro manterrà sempre la stessa distanza dal lato destro del suo contenitore (il contenitore per eccellenza è la Form stessa). Seguendo questa logica, ancorando un controllo a tutti i lati, si otterrà come risultato che quel controllo si ingrandirà quanto il suo contenitore;
  • BackColor : colore di sfondo;
  • BackgroundImage : immagine di sfondo;
  • ContextMenuStrip : il menù contestuale associato al controllo;
  • Controls : l'elenco dei controlli contenuti all'interno del controllo corrente. Un controllo può, infatti, fare da "contenitore" per altri controlli. La finestra, la Form, è un classico esempio di contenitore, ma nel corso delle lezioni vedremo altri controlli specializzati e molto versatili pensati apposta per questo compito;
  • DoDragDrop() : inizia un'operazione di Drag and Drop da questo controllo;
  • Enabled : determina se il controllo è abilitato. Quando disabilitato, esso è di colore grigio scuro e non è possibile alcuna interazone tra l'utente e il controllo stesso;
  • Focus() : attiva il controllo;
  • Focused : determina se il controllo è attivo;
  • Font : carattere con cui il testo viene scritto sul controllo (se è presente del testo);
  • ForeColor : colore del testo;
  • Height : altezza, in pixel, del controllo;
  • Location : posizione del controllo rispetto al suo contenitore (restituisce un valore di tipo Point);
  • MousePosition : posizione del mouse rispetto al controllo (anche questa restituisce un Point);
  • Name : il nome del controllo (molto spesso coincide col nome della variabile che rappresenta quel controllo nel form);
  • Size : dimensione del controllo (restituisce un valore di tipo Size);
  • TabIndex : forse non tutti sanno che con il pulsante Tab (tabulazione) è possibile scorrere ordinatamente i controlli. Ad esempio, in una finestra con due caselle di testo, è possibile spostarsi dalla prima alla seconda premendo Tab. Questo accade anche nei moduli Web. La proprietà TabIndex determina l'indice associato al controllo in questo meccanismo. Così, se una casella di testo ha TabIndex = 0 e un menù a discesa TabIndex = 1, una volta selezionata la casella di testo sarà possibile spostarsi sul menù a discesa premendo Tab. L'iterazione può continuare indefinitamente per un qualsiasi numero di controlli e, una volta raggiunta la fine, reinizia daccapo;
  • Tag : qualsiasi oggetto associato al controllo. Tag è di tipo Object ed è molto utile per immagazzinare informazioni di vario genere che non è possibile porre in nessun'altra proprietà;
  • Text : testo visualizzato sul controllo (se il controllo prevede del testo);
  • Visible : determina se il controllo è visibile;
  • Width : larghezza, in pixel, del controllo.

 

La classe Form

Form è la classe che rappresenta una finestra. Ogni finestra che noi usiamo nelle applicazioni è rappresentata da una classe derivata da Form. Oltre ai membri di Control, essa ne espone molti altri. Ecco una lista molto sintetica di alcuni membri che potrebbero interessarvi ad ora:

  • AllowTransparency : determina se il form può essere reso trasparente (vedi proprietà Opacity);
  • AutoScroll : determina se sulla finestra venga automaticamente mostrata una barra di scorrimento quando i controlli che essa contiene sporgono oltre il suo bordo visibile;
  • Close() : chiude la form. Se si tratta della prima form, l'applicazione termina (è possibile modificare questo comportamento, come vedremo in seguito);
  • FormBorderStyle : imposta il tipo di bordo della finestra (nessuno, singolo, doppio: singolo equivale a non poter ridimensionare la finestra);
  • HelpButton : determina se il pulsante help (?) è visualizzato nella barra del titolo, accanto agli altri;
  • Hide() : nasconde la form, ossia la rende invisibile, ma non la chiude;
  • Icon : indica l'icona mostrata nell'angolo superiore sinistro della finestra, vicino al titolo. Questà proprietà è di tipo System.Drawing.Icon;
  • MaximizeBox : determina se l'icona che permette di ingrandire la finestra a schermo intero è visualizzata;
  • MaximumSize : massima dimensione consentita;
  • MinimizeBox : determina se il pulsante che permette di ridurre la finestra a icona è visualizzato;
  • MinimumSize : minima dimensione consentita;
  • Opacity : imposta l'opacità della finestra: 0 per renderla invisibile, 1 per renderla totalmente opaca (normale);
  • Show() : visualizza la form nel caso sia nascosta o comunque non attualmente visibile sullo schermo;
  • ShowDialog() : come Show(), ma la finestra viene mostrata in modalità Dialog. In questo modo, l'utente può interagire solo con essa e con nessun'altra form del programma fino a che questa non sia stata chiusa, confermando una scelta o annullando l'operazione. Restituisce come risultato un valore enumerato che indica che azione l'utente abbia compiuto;
  • ShowIcon : determina se visualizzare l'icona nella barra del titolo;
  • ShowInTaskBar : determina se visualizzare la finestra nella barra delle applicazioni;
  • TopMost : determina se la finestra è sempre in primo piano;
  • WindowState : indica lo stato della finestra (normale, massimizzata, ridotta a icona).

Questi sono solo alcuni dei molteplici membri che la classe espone. Ho elencato soprattutto quelli che vi permetteranno di modificare l'aspetto ed il comportamento della form, in quanto, allo stato attuale delle cose, non siete in grado di gestire e comprendere il resto delle funzionalità. Nel corso di questa sezione, comunque, introdurrò via via nuovi dettagli riguardo questa classe e spiegherò come usarli. Ma ora passiamo alla scrittura del primo programma...

Il controllo Button

Per il prossimo esempio, dovremo usare un nuovo controllo, che possiamo indicare senza remore come il principale e più usato meccanismo di interazione: il pulsante. Esso viene rappresentato dal controllo Button. Dopo aver aperto un nuovo progetto Windows Form vuoto, trascinate un nuovo pulsante dalla toolbox sulla superficie della finestra e posizionatelo dove più vi aggrada. Il nome di questo controllo sarà btnHello, ad esempio.
Ora che abbiamo disposto l'unico elemento della GUI, bisogna creare un gestore d'evento che si occupi di eseguire del codice quando l'utente clicca sul pulsante. Per fare ciò, possiamo scrivere il codice a mano o semplicemente fare doppio click sul pulsante nel Designer e l'IDE scriverà automaticamente il codice associato. Questo succede perchè ogni controllo ha un "evento di default", ossia quell'evento che viene usato più spesso: il doppio click su un elemento dell'interfaccia grafica ci permette di delegare all'ambiente di sviluppo la stesura del prototipo per la Sub che dovremo creare per tale evento. Nel caso di Button, l'evento più usato è Click. Il codice automaticamente generato sarà:

Private Sub btnHello_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnHello.Click

End Sub

Ora, all'interno del corpo della procedura possiamo porre ciò che vogliamo. In questo esempio, visualizzeremo a schermo il messaggio "Hello, World!", ma in modo diverso dalle applicazioni console. In questo ambiente, si è soliti usare una particolare classe che serve per visualizzare finestre di avvertimento. Tale classe è MessageBox e ha un solo metodo statico, Show:

Public Class Form1

    Private Sub btnHello_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnHello.Click
  MessageBox.Show("Hello, World!", "Esempio", MessageBoxButtons.OK, MessageBoxIcon.Information)
    End Sub

End Class

Show accetta come minimo un parametro, ossia il messaggio da visualizzare. Tutti gli altri parametri sono "opzionali" (non nel vero senso del termine, ma esisteono 18 versioni diverse dello stesso metodo Show modificate tramite overloading). In questo caso, il secondo indica il titolo della finestra di avviso, il terzo i pulsanti visualizzati (un solo pulsante "OK") ed il quarto l'icona mostrata in fianco al messaggio (una "I" bianca su sfondo blu, che significa "Informazione").

HelloWorld.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...