In questo caso, l'uso di membri Shared non è necessario.
Basta aggiungere un campo/variabile nella classe del form contenitore (chiamiamolo MainForm) e fare in modo che tale variabile venga inizializzata con il riferimento all'oggetto relativo al form secondario che vai ad aprire facendo clic sul menu; quando il form viene aperto, la voce di menu viene disabilitata; dal form secondario, poi, in fase di chiusura, si provvede a rimuovere il riferimento sul form principale e a riabilitare all'occorrenza la voce di menu.
Un esempio di implementazione delle classi MainForm (per il form principale) e ChildForm (per il form figlio).
MainForm
codice:
Public Class MainForm
' Contiene un riferimento al form figlio
Public ChildFormRef As ChildForm
Private Sub ChildFormMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ChildFormMenuItem.Click
' Verifica se il riferimento al form figlio è impostato
If (ChildFormRef Is Nothing) Then
' Crea un'istanza della classe corrispondente al form figlio
ChildFormRef = New ChildForm()
' Il form principale copia il proprio riferimento al form figlio
ChildFormRef.MainFormRef = Me
End If
' Visualizza il form figlio
ChildFormRef.Show()
' Disabilita la voce di menu
ChildFormMenuItem.Enabled = False
End Sub
End Class
ChildForm
codice:
Public Class ChildForm
' Contiene un riferimento al form principale
Public MainFormRef As MainForm
Private Sub ChildForm_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
' Verifica se il riferimento al form principale è assegnato
If Not (Me.MainFormRef Is Nothing) Then
' Rimuove il riferimento al presente form
MainFormRef.ChildFormRef = Nothing
' Abilita nuovamente la voce di menu
MainFormRef.ChildFormMenuItem.Enabled = True
End If
End Sub
End Class
Eviterei l'uso di membri statici (metodi e variabili) qualora non siano strettamente necessari, come avviene nel caso in esame, per non pregiudicare la manutenibilità del codice e la sua espandibilità verso la gestione di casi più complessi (es. più istanze dello stesso form e altro ancora).
L'esempio sopra è ovviamente semplificato ed è fortemente migliorabile: si potrebbero aggiungere proprietà in modo da regolare automaticamente l'abilitazione/disabilitazione del menu in base al riferimento impostato per il form figlio e così via.
La gestione dello stato delle voci di menu "a-la-VB" non mi è mai piaciuta: preferisco nettamente l'implementazione Delphi e l'uso di azioni, cioè la separazione concettuale di ciò che rappresenta il comando vero e proprio, cioè l'operazione da eseguire, da quello che invece è il controllo che può invocarlo (un pulsante, una voce di menu, ecc.).
Ciao!