JavascriptProva

mercoledì 12 febbraio 2014

Menu di contenitori e controlli...

Cerchiamo di risolvere 'sta cosa che non ne ho mai voglia e la sto tirando per le lunghe...

        mGrid = New Griglia(Of Pannello)(Me, True, 30, 5, 10, 10)
        For Each elemento As Pannello In mGrid
            elemento.ContextMenuStrip = mioMenu
        Next
Mediante la classe da me creata Griglia ho creato una griglia di controlli di tipo Pannello, erede di Panel.

Ad ognuno di questi attribuisco il menu contestuale mioMenu che ho creato in fase di progettazione, vuoto.
Ovviamente, quando clicco col destro, dato che il menu contestuale è vuoto, non succede, apparentemente, assolutamente niente.
Ecco, ho fatto delle aggiunte, che marco in rosso:
        mGrid = New Griglia(Of Pannello)(Me, True, 30, 5, 10, 10)
        For Each elemento As Pannello In mGrid
            AddHandler elemento.MouseDown, AddressOf SetMenu
            elemento.ContextMenuStrip = mioMenu
        Next

   
    End Sub

    Sub setMenu()
        mioMenu.Items.Clear()
        Dim m As New ToolStripMenuItem
        m.Text = VociDelMenu(0)
        mioMenu.Items.Add(m)
    End Sub
Così, prima che il menu si mostri, lo posso modificare in quanto al click del mouse sull'elemento chiamo la routine setMenu che mi aggiunge un menu con una voce, che nella fattispecie prendo da una matrice di voci del menu, e che ha come testo "aggiungi".
Adesso attribuisco al menu "aggiungi" l'esecuzione di una routine.
Per far questo, però, devo identificare e memorizzare in una variabile l'elemento da cui ho evocato il menu.
Dichiaro una variabile oggetto:
    Dim elementoSelezionato As Object
E poi, nella routine setMenu, prima di settare il menu, memorizzo l'elemento nella variabile oggetto.
    Sub setMenu(sender As Object, e As MouseEventArgs)
        elementoSelezionato = sender
        mioMenu.Items.Clear()
        Dim m As New ToolStripMenuItem
        m.Text = VociDelMenu(0)
        mioMenu.Items.Add(m)
    End Sub
E ora studio come aggiungere un controllo nell'insieme control dell'elemento (che è una classe derivata di Panel):
    Sub aggiungi()
        elementoSelezionato.controls.add(New Button)
    End Sub
quindi attribuisco all'evento click del menu aggiunto l'handler alla routine aggiungi.
    Sub setMenu(sender As Object, e As EventArgs)
        elementoSelezionato = sender
        mioMenu.Items.Clear()
        Dim m As New ToolStripMenuItem
        m.Text = VociDelMenu(0)
        AddHandler m.Click, AddressOf aggiungi
        mioMenu.Items.Add(m)
    End Sub
E pare che funzioni...

Ho sostituito al Button una classe Casella da me creata in pochi secondi (azz, che bravo!) provvisoriamente con un'ampiezza limitata in previsione di studi futuri.
Class Casella
    Inherits Label
    Sub New()
        BackColor = Color.LightGreen
        Width = 50
    End Sub
End Class
E adesso dobbiamo studiarci un po' la gestione dei menu per quanto riguarda i controlli aggiunti...

Nessun commento:

Posta un commento