mGrid = New Griglia(Of Pannello)(Me, True, 30, 5, 10, 10) For Each elemento As Pannello In mGrid elemento.ContextMenuStrip = mioMenu NextMediante 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 SubCosì, 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 ObjectE 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 Subquindi 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 SubE 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 ClassE adesso dobbiamo studiarci un po' la gestione dei menu per quanto riguarda i controlli aggiunti...
Nessun commento:
Posta un commento