Creare Menu da codice e non con l'Editor-Menu
Come è noto, per creare un classico Menu si utilizza l'apposito Editor, che viene aperto premendo i due tasti ctrl + e; ma qui prendiamo in considerazione la possibilità di realizzare un Menu mediante il codice.
Dovremo, inoltre, collegare un evento alle sotto-voci del Menu principale, che venga solleato quando clicchiamo su una di quelle. Prendiamo in considerazione tre modalità.
Creando una routine-evento per ciascuna sotto-voce del Menu
Public Sub Form_Open() ' Dichiariamo il Menu principale: Dim mn As Menu ' Dichiariamo anche le sotto-voci del Menu: Dim mn1 As Menu Dim mn2 As Menu Dim mn3 As Menu Dim mn4 As Menu ' Impostiamo il Menu principale, impostando come "contenitore" il Form: With mn = New Menu(Me) ' Gli diamo il testo che sarà mostrato: . Caption = "File" End With ' Attribuiamo al Menu principale le sue sotto-voci, le quali attribuiamo ad un proprio Gruppo. ' Inoltre, a tali sotto-voci diamo il testo che sarà mostrato e come "contenitore" il Menu principale: With mn1 = New Menu(mn, False) As "mn1" ' Facciamo mostrare la denominazione della sotto-voce mediante ".Caption": .Caption = "Nuovo" .Name = "Nuovo" End With With mn2 = New Menu(mn, False) As "mn2" .Caption = "Apri" .Name = "Apri" End With With mn3 = New Menu(mn, False) As "mn3" .Caption = "Salva con nome..." .Name = "Salva con nome..." End With With mn4 = New Menu(mn, False) As "mn4" .Caption = "Esci" .Name = "Esci" End With End Public Sub mn1_Click() ' qui fa qualcosa... End Public Sub mn2_Click() ' qui fa qualcosa... End Public Sub mn3_Click() ' qui fa qualcosa... End Public Sub mn4_Click() ' qui fa qualcosa... End
Assegnando un medesimo Gruppo alle sotto-voci del Menu
Mostriamo due modalità possibili per assegnare un medesimo Gruppo alle sotto-voci del Menu, e per associare ciascuna sotto-voce, in qualità di oggetto, ad un evento:
Public Sub Form_Open() Dim mn, subMn As Menu Dim i As Integer Dim testo As String With mn = New Menu(FMain) .Caption = "File" End With ' Per far apparire nel Menu principale le sue sotto-voci con "specifiche" denominazioni: For i = 0 To 3 Select Case i Case 0 testo = "Nuovo" Case 1 testo = "Apri" Case 2 testo = "Salva con nome..." Case 3 testo = "esci" End Select ' Crea una nuova sotto-voce del Menu principale, e viene assegnata ad un unico Gruppo: With subMn = New Menu(mn) As "SubMn" .Caption = testo .Name = testo End With Next End Public Sub subMn_Click() ' Riscontriamo quale sotto-voce abbiamo scelto: Message.Info("Hai premuto il sotto-menu: " & Last.Name) End
oppure mediante Object.Attach():
Public Sub Form_Open() Dim mn, mn1, mn2, mn3, mn4 As Menu Dim testo As String mn = New Menu(Fmain) mn.Caption = "File" mn1 = New Menu(mn, False) With mn1 ' Facciamo mostrare la denominazione della sotto-voce mediante ".Caption": .Caption = "Nuovo" .Name = "Nuovo" End With mn2 = New Menu(mn, False) With mn2 .Caption = "Apri" .Name = "Apri" End With mn3 = New Menu(mn, False) With mn3 .Caption = "Salva con nome..." .Name = "Salva con nome..." End With mn4 = New Menu(mn, False) With mn4 .Caption = "Esci" .Name = "Esci" End With Object.Attach(mn1, Me, "ev") Object.Attach(mn2, Me, "ev") Object.Attach(mn3, Me, "ev") Object.Attach(mn4, Me, "ev") End Public Sub ev_Click() Dim obj As Object = Last ' Riscontriamo quale sotto-voce abbiamo scelto: Message.Info("Hai premuto il menu: " & Last.Name) End
o, volendo, sempre mediante Object.Attach() anche più semplicemente così:
Public Sub Form_Open() Dim mn, subMn As Menu Dim i As Integer Dim testo As String With mn = New Menu(FMain) .Caption = "File" End With ' Per far apparire nel Menu principale le sue sotto-voci con "specifiche" denominazioni: For i = 0 To 3 Select Case i Case 0 testo = "Nuovo" Case 1 testo = "Apri" Case 2 testo = "Salva con nome..." Case 3 testo = "esci" End Select ' Crea una nuova sotto-voce del Menu principale, e viene assegnata ad un unico Gruppo: With subMn = New Menu(mn) .Caption = testo .Name = testo End With Object.Attach(subMn, Me, "SubMn") Next End Public Sub subMn_Click() ' Riscontriamo quale sotto-voce abbiamo scelto: Message.Info("Hai premuto il sotto-menu: " & Last.Name) End
Creare Menu in un oggetto Window
E' possibile creare Menu anche per l'oggetto Window.
Come esempio riprendiamo in parte, ed opportunamente modificato, uno dei codici sopra descritti:
Public Sub Button1_Click() Dim w As Window Dim mn, subMn As Menu Dim i As Integer Dim testo As String ' Crea un'oggetto "Window": With w = New Window .W = 200 .H = 200 .Center .Show End With ' Crea un Menu attribuendolo all'ggetto "Window": With mn = New Menu(w) .Name = "prova_Menu" .Text = "menu" End With For i = 0 To 3 Select Case i Case 0 testo = "Nuovo" Case 1 testo = "Apri" Case 2 testo = "Salva con nome..." Case 3 testo = "esci" End Select ' Crea una nuova sotto-voce del Menu principale, ' e l'assegna al medesimo Gruppo delle altre sotto-voci: With subMn = New Menu(mn) As "SubMn" .Caption = testo .Name = testo End With Next End Public Sub subMn_Click() ' Riscontriamo quale sotto-voce abbiamo scelto: Message.Info("Hai premuto il sotto-menu: " & Last.Name) End