Menu e Tooltip in VB .NET – un esempio pratico

Nella precedente Lezione abbiamo introdotto la gestione dei menu e dei tooltip in VB .NET, evidenziandone gli aspetti chiave e le significative novità rispetto alle precedenti versioni di Visual Basic. Ora realizzeremo un piccolo programma per mostrare l’utilizzo di questi nuovi oggetti. Vogliamo creare un semplicissimo editor di testi, una versione super ridotta di Blocco note; per fare questo utilizzeremo menu, menu contestuali e tooltip, oltre a riprendere alcuni concetti che abbiamo trattato nelle precedenti Lezioni di questo corso.

L’applicazione avrà un MainMenu che conterrà i menu File, Modifica e Formato; il testo verrà visualizzato in una TextBox di cui ridefiniremo il menu contestuale creando un nostro ContextMenu. Un ToolTip, infine, sarà utilizzato per visualizzare informazioni sul testo. Dato il numero di oggetti che creeremo, è conveniente assegnare dei nomi significativi ai vari controlli, piuttosto che utilizzare quelli predefiniti; per fare questo si deve intervenire sulla proprietà (Name) del controllo, che consente di impostare il nome con cui il controllo verrà identificato all’interno del codice.

figura

Cominciamo col creare la struttura del menu. Per fare questo inseriamo un oggetto di tipo MainMenu nella form e impostiamo il suo nome su MenuPrincipale.. Per modificare i nomi degli elementi dei menu, dopo averne creato la struttura, è possibile fare clic con il tasto destro del mouse su una voce e selezionare Edit Names (Modifica nomi): così facendo, a sinistra del menu, tra parentesi quadre, comparirà il nome del menu (vedi immagine a lato), che è esattamente la proprietà Name di quel comando. Togliendo il segno di spunto da Edit Names sarà nuovamente possibile modificare le etichette dei menu. Per semplicità, invece che indicare come di consueto le proprietà dei vari oggetti in una tabella, in questo caso ci limiteremo a mostrare la struttura del menu; a fianco di ogni voce, sono indicati l’eventuale shortcut e, tra parentesi, il nome:

&File
(mnuFile)
&Modifica (mnuModifica) &Formato (mnuFormato)
&NuovoCtrLN (mnuFileNuovo) &AnnullaCtrLZ (mnuModAnnulla) Allinea a sinistra (mnuForSinistra)
&Apri…CtrLO (mnuFileApri) - (mnuModSep0) Allinea al centro (mnuForCentro)
&Salva…CtrLS (mnuFileSalva) &Taglia CtrLX (mnuModTaglia) Allinea a destra (mnuForDestra)
- (mnuFileSep0) &Copia CtrLC (mnuModCopia) - (mnuForSep0)
&Esci (mnuFileEsci) &Incolla CtrLV (mnuModIncolla) &Tutto maiuscolo (mnuForMaiusc)
Ca&ncella Del (mnuModCancella) T&utto minuscolo (mnuForMinusc)
- (mnuModSep1)
&Seleziona tutto (mnuModSelTutto)

I comandi Apri e Salva del menu File sono seguiti da tre puntini: con questa convenzione si fa capire all’utente che selezionando questi comandi si aprirà una nuova finestra di dialogo (nel nostro caso, si dovranno aprire rispettivamente le finestre di dialogo Apri e Salva con nome). Le voci di menu che non hanno i puntini, invece, corrispondono a comandi che vengono eseguiti senza necessità di ulteriore input.
I comandi del menu Formato che gestiscono l’allineamento del testo sono esclusivi, ovvero è possibile selezionarne solo uno alla volta. Per tale motivo impostiamo la loro proprietà RadioCheck su true; inoltre mettiamo a true la proprietà Checked di mnuForSinistra, perché l’allineamento a sinistra è quello predefinito. Se non riuscite a riprodurre la struttura dei menu suggerita, potete scaricare la form che la contiene facendo clic qui.

Editor VB .NET

Passiamo ora al ContextMenu. Innanzi tutto aggiungiamolo alla form e impostiamo il suo nome su MenuContestuale. Vogliamo che questo menu venga visualizzato quando si preme il tasto destro del mouse sulla TextBox, quindi deve includere comandi per operare rapidamente sul contenuto della casella di testo. Notiamo che una casella di testo include già un menu contestuale, quello predefinito di Windows. Nelle precedenti versioni di Visual Basic, per visualizzare in una TextBox un menu contestuale diverso da quello standard era necessario ricorrere ad un trucco che consisteva nel disattivare e riattivare il controllo; in VB .NET, invece, impostando la proprietà ContextMenu di una TextBox verrà visualizzato solo il nuovo menu quando si preme il pulsante destro del mouse (in pratica il menu contestuale predefinito viene disattivato).
Nel nostro esempio, per non complicare troppo il programma, nel ContextMenu ci limiteremo a riprodurre i comandi del menu Modifica. I nomi dei menu dovranno avere la forma mnuCont, come nel menu Modifica (ad esempio mnuContAnnulla, mnuContTaglia, ecc. ). La creazione del menu è lasciata come esercizio. Se avete qualche problema nella realizzazione, potete scaricare l’applicazione con il menu contestuale facendo clic qui.

La tabella seguente mostra i rimanenti oggetti da inserire nella form con le rispettive proprietà:

Nome controllo (tipo) Proprietà Valore
txtTesto (TextBox) AcceptsReturn true
AcceptsTab true
Anchor Top, Bottom, Left, Right
ContextMenu MenuContestuale
Location 0; 0
Multiline true
ScrollBars Vertical
Text <vuoto>
tltInfoTesto (ToolTip) AutomaticDelay 1000
Form1 (Form) Minimunsize 320; 240
StartPosition CenterScreen
Text Editor

L’interfaccia completa del programma è disponibile per il download facendo clic qui.

Possiamo finalmente cominciare a scrivere il codice. La prima cosa da fare è modificare le dimensioni della TextBox in modo che, all’avvio, occupi l’intero form; sarà poi la proprietà Anchor a garantirci il ridimensionamento del controllo in accordo alle dimensioni della finestra. Questo risultato si ottiene con il codice seguente:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
txtTesto.Height = Me.Height – 46
txtTesto.width = Me.width – 8
End Sub

Cominciamo ora con lo scrivere il codice da eseguire in risposta ai clic sui vari comandi di menu. Benché si possa scrivere una routine per ogni comando di menu, mostreremo qui come sia possibile usare una sola Sub per ogni menu, quindi una per il menu File, una per Modifica e una per Formato, oltre a una per il menu contestuale. Il codice del menu File è:

Private Sub mnuFileCommand(ByVal sender As Object, ByVal e As System.EventArgs) Handles mnuFileNuovo.Click, mnuFileApri.Click, mnuFileSalva.Click, mnuFileEsci.Click
Select Case CType(sender, MenuItem).Text
Case “&Nuovo”
txtTesto.Clear()
Case “&Esci”
Me.Close()
End Select
End Sub

Questa routine intercetta gli eventi clic di tutti i comandi del menu File, quindi converte l’oggetto sender in MenuItem e ne controlla la proprietà Text per sapere quale elemento è stato effettivamente selezionato. Abbiamo parlato della funzione CType nella Lezione 11. Non abbiamo incluso il codice relativo ai comandi Apri e Salva, che discuteremo nella prossima Lezione, quando parleremo delle finestre di dialogo comuni.
Per il menu Modifica, seguendo un ragionamento analogo, si ottiene:

Private Sub mnuModificaCommand(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuModAnnulla.Click, mnuModTaglia.Click, mnuModCopia.Click, mnuModIncolla.Click, mnuModCancella.Click, mnuModSelTutto.Click
Select Case CType(sender, MenuItem).Text
Case “&Annulla”
txtTesto.Undo()
Case “&Taglia”
txtTesto.Cut()
Case “&Copia”
‘…
End Select
End Sub

I rimanenti comandi del menu Modifica, il menu Formato e il menu contestuale, presentando una struttura del tutto analoga quella già trattata, sono lasciati per esercizio. E’ comunque possibile scaricare l’applicazione con tutto il codice dei menu.
L’ultima cosa che dobbiamo fare è aggiungere il codice relativo al tooltip.
Poiché il testo da visualizzare viene modificato durante la digitazione, è necessario utilizzare il metodo SetToolTip dell’oggetto tltInfoTesto; esso prevede due argomenti, il primo è il nome del controllo per cui si vuole impostare il tooltip, il secondo è il testo del messaggio da mostrare:

Private Sub txtTesto_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtTesto.TextChanged
tltInfoTesto.SetToolTip(txtTesto, “Lunghezza del testo: ” & txtTesto.TextLength & ” caratteri”)
End Sub

Abbiamo utilizzato il metodo TextChanged, in modo che il tooltip venga aggiornato ogni volta che si modifica il contenuto della casella di testo. In VB .NET è possibile creare tooltip multilinea: è sufficiente inserire il carattere vbCrLf all’interno del messaggio per andare a capo. Potete scaricare l’applicazione completa facendo clic qui.

Nella prossima Lezione parleremo dei controlli messi a disposizione da Visual Basic .NET per visualizzare le finestre di dialogo comuni, come Apri e Salva con nome; amplieremo inoltre il nostro Editor aggiungendo le funzionalità di apertura e salvataggio di un file di testo.

Both comments and pings are currently closed.

Comments are closed.