Differenze tra le versioni di "Fare riferimento alle voci del Menu da altri Form"
(6 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 2: | Riga 2: | ||
==Rendere "Globale" e "Pubblico" l'Oggetto che si riferisce al Menu== | ==Rendere "Globale" e "Pubblico" l'Oggetto che si riferisce al Menu== | ||
− | Se i menu sono fatti da codice e non nell'IDE, si può semplicemente rendere "Globale" e | + | Se i menu sono fatti da codice e non nell'IDE, all'interno del codice del ''Form'' principale si può semplicemente rendere "Globale" e "Pubblico" con la parola-chiave "PUBLIC" l'identificatore dell'istanza (Oggetto) del Menu: |
− | <FONT Color=red><B>Public</b></font> OggettoMenu As Menu | + | <FONT Color=red><B>Public</b></font> <FONT Color=green>OggettoMenu</font> As Menu |
Public Sub Form_Open() | Public Sub Form_Open() | ||
− | OggettoMenu = New Menu(Me) | + | <FONT Color=green>OggettoMenu</font> = New Menu(Me) |
...etc... | ...etc... | ||
End | End | ||
− | Nell'altro ''Form'' ( | + | Nell'altro ''Form'' (quello dal quale sarà richiamato il Menu), si richiama l'identificatore del Menu: |
− | Print FMain.OggettoMenu.Children.Count | + | Print FMain.<FONT Color=green>OggettoMenu</font>.Children.Count |
Riga 20: | Riga 20: | ||
Questa Proprietà restituisce una raccolta di tutti i menu della barra dei menu della finestra. | Questa Proprietà restituisce una raccolta di tutti i menu della barra dei menu della finestra. | ||
<BR>Tutte le forme visibili e non visibili di Menu di livello superiore e quindi i loro figli sono accessibili da quella Proprietà di tipo array. | <BR>Tutte le forme visibili e non visibili di Menu di livello superiore e quindi i loro figli sono accessibili da quella Proprietà di tipo array. | ||
− | For Each | + | <BR>Il seguente codice andrà inserito nel codice del ''Form'', dal quale si richiamano le voci del ''Menu'' principale: |
− | Print | + | For Each MenuPrincipale As Menu In <FONT Color=red><B>FMain.Menus</b></font> |
− | Next | + | |
+ | Print MenuPrincipale.Name; " possiede "; MenuPrincipale.Children.Count; " figli/voci." | ||
+ | |||
+ | Next | ||
Riga 32: | Riga 35: | ||
Dim OggettoMenu As Menu | Dim OggettoMenu As Menu | ||
− | Dim | + | Dim voce1 As Menu |
− | Dim | + | Dim voce2 As Menu |
Dim cl1 As Class1 | Dim cl1 As Class1 | ||
<FONT Color=gray>' ''Crea il Menu principale:''</font> | <FONT Color=gray>' ''Crea il Menu principale:''</font> | ||
− | With OggettoMenu = New Menu(Me) | + | With OggettoMenu = New Menu(Me) |
.Caption = "OggettoMenu" | .Caption = "OggettoMenu" | ||
End With | End With | ||
<FONT Color=gray>' ''Crea le voci del Menu principale:''</font> | <FONT Color=gray>' ''Crea le voci del Menu principale:''</font> | ||
− | With | + | With voce1 = New Menu(OggettoMenu, False) As "Voce1" |
− | .Text = " | + | .Text = "voce1" |
End With | End With | ||
− | With | + | With voce2 = New Menu(OggettoMenu, False) As "Voce2" |
− | .Text = " | + | .Text = "voce2" |
End With | End With | ||
<FONT Color=gray>' ''Crea un'apposita Classe per generare il Form secondario:''</font> | <FONT Color=gray>' ''Crea un'apposita Classe per generare il Form secondario:''</font> | ||
With cl1 = New Class1 | With cl1 = New Class1 | ||
− | .CreaForm( | + | .CreaForm(voce1, voce2) |
End With | End With | ||
Riga 60: | Riga 63: | ||
Select Case sKey | Select Case sKey | ||
− | Case " | + | Case "voce1" |
− | Print "Voce ' | + | Print "Voce 'voce1' del Menu di FMain cliccata da Form1" |
− | Case " | + | Case "voce2" |
− | Print "Voce ' | + | Print "Voce 'voce2' del Menu di FMain cliccata da Form1" |
End Select | End Select | ||
Versione attuale delle 20:03, 16 lug 2024
Per fare genericamente riferimento da altri Form alle voci del Menu, si possono adottare due modalità.
Indice
Rendere "Globale" e "Pubblico" l'Oggetto che si riferisce al Menu
Se i menu sono fatti da codice e non nell'IDE, all'interno del codice del Form principale si può semplicemente rendere "Globale" e "Pubblico" con la parola-chiave "PUBLIC" l'identificatore dell'istanza (Oggetto) del Menu:
Public OggettoMenu As Menu Public Sub Form_Open() OggettoMenu = New Menu(Me) ...etc... End
Nell'altro Form (quello dal quale sarà richiamato il Menu), si richiama l'identificatore del Menu:
Print FMain.OggettoMenu.Children.Count
Usare la Proprietà array "Window.Menus"
Questa Proprietà restituisce una raccolta di tutti i menu della barra dei menu della finestra.
Tutte le forme visibili e non visibili di Menu di livello superiore e quindi i loro figli sono accessibili da quella Proprietà di tipo array.
Il seguente codice andrà inserito nel codice del Form, dal quale si richiamano le voci del Menu principale:
For Each MenuPrincipale As Menu In FMain.Menus Print MenuPrincipale.Name; " possiede "; MenuPrincipale.Children.Count; " figli/voci." Next
Sollevare l'Evento "Action_Activate()"
Si può sollevare l'Evento "_Activate()" della Classe Action, che andrà posto nel codice del Form principale contente il Menu. [nota 1]
Nel seguente esempio si dispone un Form principale, che ha il Menu e il seguente codice:
Public Sub Form_Open() Dim OggettoMenu As Menu Dim voce1 As Menu Dim voce2 As Menu Dim cl1 As Class1 ' Crea il Menu principale: With OggettoMenu = New Menu(Me) .Caption = "OggettoMenu" End With ' Crea le voci del Menu principale: With voce1 = New Menu(OggettoMenu, False) As "Voce1" .Text = "voce1" End With With voce2 = New Menu(OggettoMenu, False) As "Voce2" .Text = "voce2" End With ' Crea un'apposita Classe per generare il Form secondario: With cl1 = New Class1 .CreaForm(voce1, voce2) End With End Public Sub Action_Activate(sKey As String) As Boolean Select Case sKey Case "voce1" Print "Voce 'voce1' del Menu di FMain cliccata da Form1" Case "voce2" Print "Voce 'voce2' del Menu di FMain cliccata da Form1" End Select End
Mentre in un altro Form (secondario), creato ad esempio tramite una Classe specifica, si avrà il seguente codice:
Private ComboBox1 As ComboBox Public Sub CreaForm(mn1 As Menu, mn2 As Menu) Dim Form1 As Form ' Crea il "Form" secondario: With Form1 = New Form As "Form1" .X = Screen.AvailableWidth * 0.2 .Y = Screen.AvailableHeight * 0.3 .W = 300 .H = 100 .Text = "Form1" .Raise End With ' Crea il "Combobox", dal quale saranno richiamate le voci del Menu di "FMain": With ComboBox1 = New ComboBox(Form1) As "ComboBox1" .X = 10 .Y = 10 .W = 150 .H = 40 .List = [mn1.Name, mn2.Name] .Placeholder = "Voci del Menu" End With End Public Sub ComboBox1_Change() ' Solleva l'Evento "Action_Activate()" in "FMain" e richiama le voci del Menu di "FMain": FMain.Action_Activate(ComboBox1.Text) End
Note
[1] Si ringrazia Gianluigi, membro del forum "www.gambas-it.org", per il suggerimento di questa modalità.