JavascriptProva

sabato 1 febbraio 2014

Smontare le costruzioni cervellotiche per i menu contestuali...

Personalizziamo il menu per i pannelli.
        'costruzione della griglia
        mGrid = New Griglia(Of Pannello)(Me, True, 30, 5, 10, 10)
        For Each elemento As Pannello In mGrid
            AddHandler elemento.MouseDown, AddressOf AggiustaMenuPannello
            elemento.ContextMenuStrip = mioMenu
        Next
    End Sub

    Sub AggiustaMenuPannello()

        aggiungiVociAlMenu(voci.aggiungi, voci.aggiungi)

    End Sub

    Sub aggiungiVociAlMenu(inizio As Integer, fine As Integer)
        mioMenu.Items.Clear()
        For n = inizio To fine
            Dim m As New ToolStripMenuItem With {.Text = VociDelMenu(n)}
            mioMenu.Items.Add(m)
        Next
    End Sub

Con il codice
        For Each elemento As Pannello In mGrid
            AddHandler elemento.MouseDown, AddressOf AggiustaMenuPannello
            elemento.ContextMenuStrip = mioMenu
        Next
Si attribuisce il gestore d'evento AggiustaMenuPannello al click su ciascuno dei pannelli della griglia, ossia si personalizza il menu mioMenu per il Pannello.
Nello stesso tempo si attribuisce come menu contestuale il menu mioMenu
L'aggiustamento del mioMenu per il pannello si vale delle due routines
    Sub AggiustaMenuPannello()

        aggiungiVociAlMenu(voci.aggiungi, voci.aggiungi)

    End Sub

    Sub aggiungiVociAlMenu(inizio As Integer, fine As Integer)
        mioMenu.Items.Clear()
        For n = inizio To fine
            Dim m As New ToolStripMenuItem With {.Text = VociDelMenu(n)}
            mioMenu.Items.Add(m)
        Next
    End Sub
...anche se forse si potrebbe fare prima con:

    Sub AggiustaMenuPannello()
        mioMenu.Items.Clear()
        mioMenu.Items.Add(New ToolStripMenuItem With {.Text = VociDelMenu(0)})
    End Sub
...che funziona lo stesso e non è così cervellotico.
Quindi il codice, a questo punto diventa, semplificando ed evitando di intricarsi in jungle di pensiero contorto:
        'costruzione della griglia
        mGrid = New Griglia(Of Pannello)(Me, True, 30, 5, 10, 10)
        For Each elemento As Pannello In mGrid
            AddHandler elemento.MouseDown, AddressOf AggiustaMenuPannello
            elemento.ContextMenuStrip = mioMenu
        Next
    End Sub

    Sub AggiustaMenuPannello()
        mioMenu.Items.Clear()
        mioMenu.Items.Add(New ToolStripMenuItem With {.Text = VociDelMenu(0)})
    End Sub
laddove a ogni pannello della griglia viene semplicemente attribuita la funzione che formatta il menu su misura per il pannello e il menu stesso come menu contestuale.
Punto!

Nessun commento:

Posta un commento