Creative Commons BY-NC-ND 2.5Questo sito e tutto il suo contenuto sono distribuiti sotto la licenza Creative Commons Attribuzione - Non Commerciale - Non opere derivate 2.5 Italia e con le condizioni d'uso definite nel disclaimer: siete pregati di leggere entrambi questi documenti prima di usufruire dei contenuti di questo sito. Per alcuni contenuti è necessaria una registrazione gratuita: non è necessario pagare e non è necessario accumulare punteggi per accedere agli articoli e scaricare i sorgenti. Basta solo essere onesti. Se volete che questo sito continui a rimanere attivo, a contribuire ogni giorno alla diffusione della cultura libera, non copiate il materiale per ripubblicarlo in altri luoghi : chi fa questo è solo un miserabile e un perdente. Se volete partecipare su settorezero e rendere le vostre idee, i vostri progetti, fruibili da tutti senza limitazioni, come dovrebbe essere in un paese civile e acculturato, potete farlo tranquillamente.

VB.NET – Aggiungere a runtime una voce di menù ad un menustrip ed assegnargli eventi

Autore: Giovanni Bernardo | Data pubblicazione: 23 settembre 2009
Categorie: VB.NET

aggiungere_toolstripmenuitem_e_relativo_handlerNelle applicazioni capita spesso di dover aggiungere a runtime dei controlli per aggiornare la nostra interfaccia in base ad eventi esterni o interni. In questo articolo faccio l’esempio di un menustrip già esistente e posizionato nel nostro form, con varie voci principali di menù già inserite: per una di queste voci vogliamo aggiungere delle sottovoci alle quali assegnare anche la funzione da svolgere sull’evento di click (handler).

L’immagine a lato dovrebbe chiarire l’intento che si prefigge questo articolo.

Supponiamo quindi di avere sul nostro form un menustrip (chiamato ad esempio menustrip1) nel quale sono già definite delle voci, per una di queste voci, che chiameremo (proprietà (name)), ad esempio, menustrip_voce1, vogliamo aggiungere vari sottomenu in base al contenuto di un array di stringhe chiamato arrayvoci (in pratica tale array conterrà un elenco di stringhe, ognuna di queste stringhe diventerà una sottovoce di menustrip_voce1.

Vediamo la prima parte del codice che ci permette di aggiungere le sottovoci e definire un handler:

1
2
3
4
5
6
For C As Integer = 0 To arrayvoci.GetUpperBound(0)
    Dim TSMI As New ToolStripMenuItem
    TSMI.Text = arrayvoci(C)
    menustrip_voce1.DropDownItems.Add(TSMI)
    AddHandler TSMI.Click, AddressOf TSMI_Click
Next

Spiego il codice:

Riga 1 : effettuo un ciclo per ogni elemento dell’array (GetUpperBound(0) mi fornisce l’ultimo indice dell’array)
Riga 2 : istanzio un nuovo ToolStripMenuItem, che è la classe che identifica le sottovoci di menù
Riga 3 : alla nuova sottovoce assegno un testo (che sarà la stringa visualizzata all’utente), presa dall’array
Riga 4 : aggiungo la nuova sottovoce alla voce di menù facente parte del menustrip
Riga 5 : aggiungo il gestore di evento sul click del ToolStripMenuItem: quando verrà fatto click su tale sottovoce, verrà richiamata la sub identificata come TSMI_Click: da ciò si evince che la sub sarà la stessa per ogni nuova voce aggiunta, sarà nella sub che andremo a discriminare quale sottovoce è stata cliccata.

Create le nuove sottovoci di menù, passiamo a definire la sub che gestirà l’evento click:

1
2
3
4
5
Private Sub TSMI_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
    Dim mnu As ToolStripMenuItem
    mnu = DirectCast(sender, ToolStripMenuItem)
    ' qui imposteremo il codice da eseguire in base ad una particolare proprietà di mnu
End Sub

Questa sub gestirà l’evento di click su ogni nuova voce di menù aggiunta a runtime:
Riga 2 : istanzio un ToolStripMenuItem
Riga 3 : il ToolStripMenuItem viene posto uguale al ToolStripMenuItem cliccato dall’utente

La funzione DirectCast converte l’oggetto sorgente (primo argomento: variabile sender intercettata dalla sub come System.Object) nell’oggetto specificato come secondo argomento, nel nostro caso specifico, l’oggetto cliccato sarà convertito in un ToolStripMenuItem.

In questo momento la variabile mnu conterrà tutte le proprietà del ToolStripMenuItem cliccato, che possiamo sfruttare per discriminare quale voce di menù è stata premuta, possiamo utilizzare ad esempio la proprietà Text, per far eseguire istruzioni differenti in base alla voce di menù cliccata (ovviamente le proprietà Text delle varie sotto-voci inserite a runtime rispecchieranno il contenuto dell’array con il quale tali voci sono state nominate).

Questo è solo un semplice esempio di come si può agire, le metodiche in realtà sono molteplici:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub TSMI_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
    Dim mnu As ToolStripMenuItem
    mnu = DirectCast(sender, ToolStripMenuItem)
 
    Select Case mnu.Text
       Case "voce 1"
          ' istruzioni da eseguire se è stata cliccata la voce con scritto voce 1
       Case "voce 2"
          ' istruzioni da eseguire se è stata cliccata la voce con scritto voce 2
       Case "voce 3"
          ' istruzioni da eseguire se è stata cliccata la voce con scritto voce 3
       Case Else
          ' istruzioni de eseguire se è stata cliccata una voce diversa dalle 3 precedenti
    End Select
End Sub

Altri articoli

L'articolo ti è piaciuto o ti è stato utile per risolvere un problema? Supporta e mantieni in vita questo sito, ci basta soltanto un caffè o una birra.
Se desiderate che settorezero continui a rimanere gratuito e fruibile da tutti, non copiate il nostro materiale e segnalateci se qualcuno lo fa

Puoi lasciare un commento, o un trackback dal tuo sito.

  1. Ancora nessun commento.

Devi essere collegato per lasciare un commento.

  1. Ancora nessun trackback
settorezero.com e il logo Zroid™ ©2007÷2012 Giovanni Bernardo - E' vietata la copia e la distribuzione anche parziale dei contenuti di questo sito web senza l'esplicito consenso dell'autore.
I contenuti di settorezero.com sono distribuiti sotto una licenza Creative Commons Attribuzione-Non Commerciale-Non Opere derivate 2.5 Italia a cui vanno aggiunte le condizioni d'uso definite nel disclaimer.
settorezero.com e tutti i suoi contenuti sono tutelati dalla legge sul diritto d'autore per cui i trasgressori sono perseguibili a norma di legge.
Creative Commons BY-NC-ND 2.5
Il tema di questo sito è basato sul tema Fusion per wordpress, realizzato originariamente da digitalnature e fa uso del plugin Wassup per il computo delle statistiche. Per contattare l'autore siete pregati di utilizzare la sezione contatti.
Per essere aggiornato con tutte le novità di settorezero.com seguici anche anche su Facebook Twitter Tumblr Blogspot Youtube.