Figura 1
In questo articolo verrà illustrato il controllo per i menu ossia la classe menustrip, il quale amplia il controllo mainmenu che continuerà ad esserci.
In particolare vedremo come creare un menu con icone accanto alle singole voci (figura 1), una combobox ed una casella di tipo testo situate nelle voci di menu strumenti (figura 2).
Il menustrip è una nuova classe, già presente con la versione del framework 2.0, il quale amplia di molte le funzionalità del controllo mainmenu, il quale continua ad esserci, in questo nuovo controllo sono stati aggiunti nuovi eventi, nuovi metodi e nuove proprietà. Questo articolo avrà il compito di illustrare alcune di queste funzionalità.
Figura 2
Creazione del menu in modalità disegno “Design time”
Avviamo Visual Studio 2008, e si crea un nuovo progetto windows. Trasciniamo sulla form il controllo menustrip, situato nella barra degli strumenti, a questo punto facciamo clic su tale controllo e nella parte superiamo, scriviamo la parola File.
Fatto ciò facciamo click sulla parte inferiore della parola appena scritta, e digitiamo la parola apri, a tale voce inseriamo un icona, per far ciò, facciamo click con il tasto destro del mouse (figura 3) e nel menu di scelta rapida (figura 3) selezioniamo la voce imposta immagine o in alternativa, nella finestra delle proprietà selezionate la voce image. Verrà visualizzata una finestra (figura 4) la quale tramite il pulsante con la dicitura “importa...” ci permette di importare nel nostro progetto un oggetto di tipo immagine, selezionandolo nel nostro computer.
Figura 3
A questo punto selezioniamo la nostra icona e facciamo click sul pulsante ok, verrà visualizzata accanto alla parola Apri, la nostra icona appena selezionata. Aggiungiamo un’altra voce di menu, sotto la voce del menu creato precedentemente, e scriviamo la parola esci, a questo punto inseriamo anche a questa voce, un icona, sempre facendo click con il tasto destro del mouse e selezionare dal menu di scelta rapida la voce "Imposta immagine".
Figura 4
A questo punto il nostro menu sarà come mostrato in figura 1.
Inseriamo un’altra voce dopo la dicitura file, scriviamo la parola Strumenti, sotto a tale voce scriviamo la parola citta, sempre tramite il menu di scelta rapida (tasto destro del mouse) selezioniamo la voce converti in, e selezioniamo la voce combobox (figura 5) tale impostazione ci permette di avere una voce di menu formato combobox.
Figura 5
Per riempire tale combobox con dei valori, dobbiamo fare click con il tasto destro e selezionare la voce proprietà, nella finestra delle proprietà selezioniamo la voce (proprietà) items. A questo punto verrà aperta una finestra dov’è possibile inserire dei valori, per esempio digitiamo le seguenti voci (Roma, Catania e Firenze).
Facciamo click sotto alla voce di menu appena creato, e digitiamo la parola trova, a questo punto facciamo click con il tasto destro del mouse, e nel menu di scelta rapida selezioniamo la voce converti in e poi la voce textbox. Ogni menu in base al tipo impostato, avrà degli eventi, per esempio per il menu di tipo combobox, l’evento TextChanged ci indicherà quando il testo della combobox cambia.
Mentre per il menu di tipo textbox utilizzeremo l’evento LostFocus per sapere quando perde il focus, e quindi per esempio utilizzarlo come ricerca di parole nei nostri programmi, tipo la guida in linea di Microsoft Word, situata nella barra dei menu.
Creazione di un menu a run time
Il codice riportato qui di seguito illustra la creazione di un menu a run time(quando il programma è in esecuzione), con determinate formattazioni.
Prendendo come esempio il menu precedentemente creato, vedremo come ripetere tale operazione, quando il programma è in esecuzione tramite righe di codice.
Prima di tutto bisogna creare un oggetto di tipo menustrip, il quale rappresenta tutte le voci e sotto voci del menu.
Per ogni voce che si vuole creare, dobbiamo utilizzare l’oggetto di tipo toolstripmenuitem , il quale rappresenta una singola voce di menu. La proprietà text di tale oggetto ci permette di inserire il testo, mentre la proprietà image permette di inserire un immagine. Se vogliamo abbinare a tale voce un evento dobbiamo crearci una funzione, la quale viene richiamata tramite la parola chiave addressof(vb.Net) o += (C#), che avrà il compito di “indirizzare” l’evento dell’oggetto alla nostra funzione creata.
Utilizzando la classe My (vb.net) o properties (C#) abbiniamo le icone del progetto, alle singole voci di menu, la classe My o Properties possono contenere diverse risorse, quali bmp, ico, ecc. Tali icone sono state inserire in precedenza. Per aggiunge la sottovoce al menu dobbiamo utilizzare il metodo add della proprietà DropDownItems dell’oggetto ToolStripMenuItem, infatti esso permette di inserire sotto ad una voce di menu(item) un sottomenu (subitem).
Di seguito è riportato il codice delle suddette dichiarazioni, :
VB.Net
Private Sub FrmCreaMenuRuntime_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'menu principale
Dim MnsMenu As New MenuStrip()
'item file
Dim mntItemMenuFile As New ToolStripMenuItem()
mntItemMenuFile.Text = "File"
'item apri
Dim mntItemMenuApri As New ToolStripMenuItem
mntItemMenuApri.Text = "Apri"
mntItemMenuApri.Image = My.Resources.open
'creo un riferimento all'evento click
AddHandler mntItemMenuApri.Click, AddressOf MenuApri_click
'inserisco nell'item file la sottovoce
mntItemMenuFile.DropDownItems.Add(mntItemMenuApri)
'item Esci
Dim mntItemMenuEsci As New ToolStripMenuItem
mntItemMenuEsci.Text = "Esci"
mntItemMenuEsci.Image = My.Resources.exit1
'creo un riferimento per l'evento click
AddHandler mntItemMenuEsci.Click, AddressOf MenuChiudi_Click
'inserisco nell'item file la sottovoce
mntItemMenuFile.DropDownItems.Add(mntItemMenuEsci)
'inserisco i vari item
MnsMenu.Items.Add(mntItemMenuFile)
'creo il secondo item strumenti
'item strumenti
Dim mntItemMenuStrumenti As New ToolStripMenuItem
mntItemMenuStrumenti.Text = "Strumenti"
'item combo
Dim MntItemMenuCitta As New ToolStripComboBox
Dim StrCitta() As String = {"Roma", "Milano", "Firenze"}
MntItemMenuCitta.Items.AddRange(StrCitta)
'creo l'evento per la combo
AddHandler MntItemMenuCitta.TextChanged, AddressOf MenuCitta_TextChange
'aggiungo l'item combo agli strumenti
mntItemMenuStrumenti.DropDownItems.Add(MntItemMenuCitta)
'item textboxt
Dim MntItemMenuTrova As New ToolStripTextBox
MntItemMenuTrova.Text = "Trova"
'creo l'evento per la voce trova
AddHandler MntItemMenuTrova.LostFocus, AddressOf MenuTrova_LostFocus
'aggiungo un item al menu strumenti
mntItemMenuStrumenti.DropDownItems.Add(MntItemMenuTrova)
'aggiungo l'item strumenti al menu
MnsMenu.Items.Add(mntItemMenuStrumenti)
Me.Controls.Add(MnsMenu)
End Sub
'Evento per la voce di menu esci
Private Sub btnesci_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Me.Close()
End Sub
'Evento per la voce di menu apri
Private Sub MenuApri_click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim DlgApri As New OpenFileDialog
DlgApri.ShowDialog()
End Sub
'evento chiudi
Private Sub MenuChiudi_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Me.Close()
End Sub
'evento per il menu citta
Private Sub MenuCitta_TextChange(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim MnuItemCitta As ToolStripComboBox = CType(sender, ToolStripComboBox)
MessageBox.Show("La città selezionata è: " & MnuItemCitta.Text)
End Sub
'Evento per il menu trova
Private Sub MenuTrova_LostFocus(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim MnuItemTrova As ToolStripTextBox = CType(sender, ToolStripTextBox)
MessageBox.Show("Vuoi trovare la parola: " & MnuItemTrova.Text)
End Sub
C#
private void FrmCreaMenuRuntime_Load(object sender, EventArgs e)
{
//menu principale
MenuStrip MnsMenu = new MenuStrip();
//item file
ToolStripMenuItem mntItemMenuFile = new ToolStripMenuItem();
mntItemMenuFile.Text = "File";
//item apri
ToolStripMenuItem mntItemMenuApri = new ToolStripMenuItem();
mntItemMenuApri.Text = "Apri";
mntItemMenuApri.Image = Properties.Resources.open;
//creo un riferimento all'evento click
mntItemMenuApri.Click += new EventHandler(mntItemMenuApri_Click);
//inserisco nell'item file la sottovoce
mntItemMenuFile.DropDownItems.Add(mntItemMenuApri);
//item Esci
ToolStripMenuItem mntItemMenuEsci = new ToolStripMenuItem();
mntItemMenuEsci.Text = "Esci";
mntItemMenuEsci.Image = Properties.Resources.exit1;
//creo un riferimento per l'evento click
mntItemMenuEsci.Click += new EventHandler(mntItemMenuEsci_Click);
//inserisco nell'item file la sottovoce
mntItemMenuFile.DropDownItems.Add(mntItemMenuEsci);
//inserisco i vari item
MnsMenu.Items.Add(mntItemMenuFile);
//creo il secondo item strumenti
//item strumenti
ToolStripMenuItem mntItemMenuStrumenti = new ToolStripMenuItem();
mntItemMenuStrumenti.Text = "Strumenti";
//item combo
ToolStripComboBox MntItemMenuCitta = new ToolStripComboBox();
string[] StrCitta = { "Roma", "Milano", "Firenze" };
MntItemMenuCitta.Items.AddRange(StrCitta);
//creo l'evento per la combo
MntItemMenuCitta.TextChanged += new EventHandler(MntItemMenuCitta_TextChanged);
//aggiungo l'item combo agli strumenti
mntItemMenuStrumenti.DropDownItems.Add(MntItemMenuCitta);
//item textboxt
ToolStripTextBox MntItemMenuTrova = new ToolStripTextBox();
MntItemMenuTrova.Text = "Trova";
//creo l'evento per la voce trova
MntItemMenuTrova.LostFocus += new EventHandler(MntItemMenuTrova_LostFocus);
//aggiungo un item al menu strumenti
mntItemMenuStrumenti.DropDownItems.Add(MntItemMenuTrova);
//aggiungo l'item strumenti al menu
MnsMenu.Items.Add(mntItemMenuStrumenti);
this.Controls.Add(MnsMenu);
}
void MntItemMenuTrova_LostFocus(object sender, EventArgs e)
{
ToolStripTextBox MnuItemTrova = (ToolStripTextBox)sender;
MessageBox.Show("Vuoi trovare la parola: " + MnuItemTrova.Text);
}
void MntItemMenuCitta_TextChanged(object sender, EventArgs e)
{
ToolStripComboBox MnuItemCitta = (ToolStripComboBox) sender;
MessageBox.Show("La città selezionata è: " + MnuItemCitta.Text);
}
void mntItemMenuEsci_Click(object sender, EventArgs e)
{
this.Close();
}
void mntItemMenuApri_Click(object sender, EventArgs e)
{
OpenFileDialog dlgApri = new OpenFileDialog();
dlgApri.ShowDialog();
}
Per inserire i vari menu al controllo menustrip, il quale è il contenitore di tutte le voci di menu, dobbiamo utilizzare il metodo Add della proprietà items dell’oggetto menustrip. Fatto ciò dobbiamo aggiungere il controllo menustrip alla finestra, questo avviene tramite il metodo add della proprietà Controls, della nostra form.
Di seguito è riportato il codice delle suddette dichiarazioni:
VB.Net
'aggiungo l'item strumenti al menu
MnsMenu.Items.Add(mntItemMenuStrumenti)
Me.Controls.Add(MnsMenu)
C#
//aggiungo l'item strumenti al menu
MnsMenu.Items.Add(mntItemMenuStrumenti);
this.Controls.Add(MnsMenu);
Conclusioni
In questo articolo sono stato illustrati i passi per creare un menu con determinate formattazioni, utilizzando la nuova classe per i menu ossia la menustrip.
Come si è potuto notare questa classe offre ampie potenzialità, che nella classe mainmenu non era posibile, solo tramite dovute implementanzioni a tale classe.
Tramite la parola download è possibile scaricare il sorgente utilizzato nell'articolo.
Download