Differenze tra le versioni di "Fare riferimento alle voci del Menu da altri Form"

Da Gambas-it.org - Wikipedia.
Riga 26: Riga 26:
  
 
==Sollevare l'Evento "Action_Activate()"==
 
==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.
+
Si può sollevare l'Evento "_Activate()" della Classe ''Action'', che andrà posto nel codice del ''Form'' principale contente il Menu. <SUP>&#091;[[#Note|nota 1]]&#093;</sup>
  
 
Nel seguente esempio si dispone un ''Form'' principale, che ha il Menu e il seguente codice:
 
Nel seguente esempio si dispone un ''Form'' principale, che ha il Menu e il seguente codice:
Private OggettoMenu As Menu
 
Private minus1 As Menu
 
Private minus2 As Menu
 
 
 
 
  Public Sub Form_Open()
 
  Public Sub Form_Open()
 
   
 
   
 +
  Dim OggettoMenu As Menu
 +
  Dim minus1 As Menu
 +
  Dim minus2 As Menu
 
   Dim cl1 As Class1
 
   Dim cl1 As Class1
 
    
 
    
Riga 106: Riga 104:
 
   
 
   
 
  End
 
  End
 +
 +
 +
 +
=Note=
 +
[1] Si ringrazia [https://www.gambas-it.org/smf/index.php?action=profile;u=1249 Gianluigi], membro del forum "www.gambas-it.org", per il suggerimento di questa modalità.

Versione delle 19:44, 16 lug 2024

Per fare genericamente riferimento da altri Form alle voci del Menu, si possono adottare due modalità.

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 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 (esterno a quello che contiene 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.

For Each OggettoMenu As Menu In FMain.Menus
 Print OggettoMenu.Name; " possiede "; hMenu.Children.Count; " figli."

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 minus1 As Menu
 Dim minus2 As Menu
 Dim cl1 As Class1
 
' Crea il Menu principale:
 With OggettoMenu = New Menu(Me) As "OMenu"
   .Caption = "OggettoMenu"
 End With
 
' Crea le voci del Menu principale:
 With minus1 = New Menu(OggettoMenu, False) As "minus1"
   .Text = "minus1"
 End With
 With minus2 = New Menu(OggettoMenu, False) As "minus2"
   .Text = "minus2"
 End With
 
' Crea un'apposita Classe per generare il Form secondario:
 With cl1 = New Class1
   .CreaForm(minus1, minus2)
 End With

End


Public Sub Action_Activate(sKey As String) As Boolean

 Select Case sKey
   Case "minus1"
     Print "Voce 'minus1' del Menu di FMain cliccato da Form1"
   Case "minus2"
     Print "Voce 'minus2' del Menu di FMain cliccato 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à.