Visualizza il feed RSS

MarcoGG : Articoli Blog

[VB.NET] Gestione ricorsiva voci menu di MenuStrip

Valuta questo inserimento
di pubblicato il 10-01-2011 alle 10:05 (3750 Visite)
Descrizione :
Una tecnica per gestire gli Handlers di menu particolarmente complessi.

Tratto da :
[.Net / Winforms]Oggetto MenuStrip - Hardware Upgrade Forum

Non è necessario scrivere un Evento Click separato per ogni Item o SubItem di un MenuStrip.
Nel caso in cui si abbiano menu con molte diramazioni e/o menu dinamici, può essere utile gestirne gli Handlers via codice.
Si può gestire l'evento Click solo su tutti gli Items e SubItems del menu che NON hanno ulteriori diramazioni, ma che costituiscono le voci di menu effettive ( che quindi corrispondono alle azioni vere e proprie dell'applicazione ).
Tutto può essere fatto in modo centralizzato, con un Metodo ricorsivo che aggiunge gli Handlers solo alle voci di menu "finali".

1. Il Metodo ricorsivo :

codice:
 
    Private Sub CreaHandlersMenu(ByVal tsmi As ToolStripMenuItem)
 
        If tsmi.HasDropDownItems Then
            For Each ddi As ToolStripDropDownItem In tsmi.DropDownItems
                If ddi.HasDropDownItems Then
                    CreaHandlersMenu(ddi)
                Else
                    AddHandler ddi.Click, New EventHandler(AddressOf MioMenuItemClick)
                End If
            Next
        Else
            AddHandler tsmi.Click, New EventHandler(AddressOf MioMenuItemClick)
        End If
 
    End Sub
2. Il Metodo associato al Click :

codice:
 
    Private Sub MioMenuItemClick(ByVal sender As System.Object, ByVal e As System.EventArgs)
        MessageBox.Show(DirectCast(sender, ToolStripMenuItem).Text)
    End Sub
Da modificare a piacere.

3. Codice di aggiunta Handlers, tipicamente su Form Load :

codice:
 
        For Each tsmi As ToolStripMenuItem In MenuStrip1.Items
            CreaHandlersMenu(tsmi)
        Next
Quale che sia il numero e il livello dei menu e sottomenu nidificati, risolve.

aggiornamento da 13-05-2011 a 12:46 di MarcoGG

Tag: vb.net
Categorie
Programmazione

Commenti

  1. L'avatar di MarcoGG
    Modifica :
    Sostituito MsgBox() con MessageBox.