lunedì 31 ottobre 2011

[VB.NET] Gestione ricorsiva voci MenuStrip

Descrizione :
Una tecnica per gestire gli Handlers di menu particolarmente complessi.

+ Articolo :

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 :

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

+ Fine Articolo.

Un Click su "Mi Piace" è il modo migliore per ringraziare l'autore di questo articolo.



0 commenti:

Posta un commento

Favorites Twitter Facebook Delicious Digg Stumbleupon More

 
Design by Free WordPress Themes Modificato da MarcoGG