Newsgroup: it.comp.lang.visual-basic
Titolo: Dare priorità assoluta a un form (Era passaggio dei form tra funzioni)

Ieri ho provato a farmi aiutare nella gestione un po' complessa di due form
e una funzione Public.
Avendo ricevute critiche per il codice da me scritto ma non riuscendo ad
adattare il codice da voi ricevuto provo a spiegare quello che mi serve!
Io ho una serie di form (una decina) che hanno un pulsante fine che
ovviamente deve far uscire dal programma.
Io però perchè si possa uscire dal programma richiedo una password.
Io ho realizzato quindi un  form che chiamato al clic sul pulsante fine
visualizzi una textbox in cui inserire la pwd un pulsante ok e uno annulla
per tornare indietro.
Fino a qui nessun problema....
Siccome il form da cui schiaccio fine ha grandezza a tutto schermo e il form
di uscita è piccolo se colui che sta usando il programma preme con il mouse
sul form iniziale il form uscita scompare.
Come posso fare per obbligare l'utente o a inserire pwd e premere ok o a
uscire premendo annulla?
Io avevo pensato a rendere not enabled il form di partenza attraverso una
procedura pubblica in un modulo ma mi sembra di aver capito che oltre a
essere un casino  è anche sconsigliabile!
Per favore help me (come sempre fate del resto, chissà se un giorno potrò
sdebitarmi!)
Paolo
P.s. In particolare volevo ringraziare Zanna e effedipi per le loro answers
di ieri.

Quando invochi l'evento Show del frmPasswEnd posponi la clausola vbModal
(Es. frmPasswEnd.Show vbModal). Abbi cura dell'eventuale contesto MDI
(MDIChild = [True]/[False]). Cfr. vbModal nell'help in linea.
E non ti impegolare nell'utilizzo spurio di altre proprietą (enabled,
visible), il settaggio delle quali esula dalle finalitą di quanto vuoi
ottenere; inoltre se procedi nel percorso che hai intrapreso sei
costretto  a continui switch tra l'una e l'altra delle opzioni,
dilatando il codice, il tempo di implementazione, il tempo di
manutenzione in futuro, generando espedienti che magari funzionano ma
contemporaneamente palesano le lacune e antinomie logiche di una
struttura che arranca.


Grazie anche per gli altri consigli che mi saranno utili in futuro per
evitare i problemi da te enunciati

Non ho elementi sufficienti per sapere cosa stai implementando e non
vorrei essere impreciso o dare risposte poco esaustive, ma spero che gli
elementi dell'help, di cui sotto, ti aiutino dove io fallirei.
(P.S. Per i riferimenti al linguaggio VB puoi utilizzare anche gli help
delle applicazioni Office, meglio Excel ed Access: non sono completi,
quanto quello dell'ambiente di sviluppo, ma indicano correttamente un
percorso valido per la soluzione di dubbi, smemoratezze, intenzioni di
pensiero, forza delle speranze).
**********************************************************************************************************************************************
						Estratti dall'Help in Linea:
**********************************************************************************************************************************************
Oggetto MDIForm
Un form MDI (multiple-document interface) è la finestra che costituisce
lo sfondo dell'applicazione e il contenitore dei form la cui proprietà
MDIChild è impostata su True.
Sintassi
MDIForm
Osservazioni
È possibile creare un oggetto MDIForm scegliendo Form MDI dal menu
Inserisci.
Un'applicazione può includere un solo oggetto MDIForm, ma molti form MDI
secondari. Se è attivo un form MDI secondario che contiene menu, la
relativa barra dei menu sostituirà automaticamente la barra dei menu
dell'oggetto MDIForm. I form MDI secondari vengono visualizzati
all'interno dell'oggetto MDIForm come icone.
Un oggetto MDIForm può contenere solo i controlli Menu e PictureBox e i
controlli aggiuntivi per i quali è disponibile la proprietà Align. Se si
desidera includere altri controlli, disegnare una casella immagine sul
form e quindi i controlli desiderati all'interno di questa. È possibile
utilizzare il metodo Print per visualizzare testo in una casella
immagine in un oggetto MDIForm, ma non per visualizzare testo
nell'oggetto MDIForm stesso.
L'oggetto MDIForm non può essere a scelta obbligatoria. 
I form MDI secondari vengono creati indipendentemente dall'oggetto
MDIForm, all'interno del quale tuttavia si trovano sempre in fase di
esecuzione.
È possibile accedere all'insieme dei controlli di un oggetto MDIForm
tramite l'insieme Controls. Per nascondere, ad esempio, tutti i
controlli di un oggetto MDIForm è possibile utilizzare il seguente
codice:
For Each Control in MDIForm1.Controls
	Control.Visible = False
Next Control
La proprietà Count dell'oggetto MDIForm indica il numero di controlli
dell'insieme Controls.
**********************************************************************************************************************************************
Proprietà Parent
Restituisce il form, l'oggetto o l'insieme contenente un controllo o un
altro oggetto o insieme.
Sintassi
oggetto.Parent
Il segnaposto oggetto rappresenta un'espressione oggetto che definisce
un oggetto dell'elenco "Si applica a".
Osservazioni
Utilizzare la proprietà Parent per accedere alle proprietà, ai metodi o
ai controlli di un oggetto principale, ad esempio:
MyButton.Parent.MousePointer = 4
La proprietà Parent è utile in un'applicazione nella quale gli oggetti
vengono passati come argomenti. Ad esempio, è possibile passare una
variabile di controllo a una routine generale in un modulo e utilizzare
la proprietà Parent per accedere al form principale.
Tra la proprietà Parent e la proprietà MDIChild non esiste nessuna
relazione. Tuttavia, vi è una relazione principale-secondario tra un
oggetto MDIForm e un qualsiasi oggetto Form la cui proprietà MDIChild
sia impostata su True.
**********************************************************************************************************************************************
Proprietà MDIChild
Restituisce o imposta un valore che indica se un form viene visualizzato
come form MDI secondario all'interno di un form MDI. Di sola lettura in
fase di esecuzione.
Sintassi
oggetto.MDIChild
Il segnaposto oggetto rappresenta un'espressione oggetto che definisce
un oggetto dell'elenco "Si applica a".
Impostazioni
Le impostazioni della proprietà MDIChild sono:
Impostazione	Descrizione
True	Il form è un form MDI secondario e viene visualizzato all'interno
del form MDI principale.
False	(Predefinita) Il form non è un form MDI secondario.
Osservazioni
Utilizzare questa proprietà quando si crea un'applicazione MDI
(Multiple-Document Interface). In fase di esecuzione, i form che hanno
questa proprietà impostata su True vengono visualizzati in un form MDI.
All'interno del form MDI principale, un form MDI secondario può essere
ingrandito, ridotto a icona e spostato.
Quando si utilizzano form MDI secondari, tenere presenti le seguenti
osservazioni:
·	In fase di esecuzione, quando un form MDI secondario viene ingrandito,
la didascalia viene visualizzata insieme a quella del form MDI
principale.
·	In fase di progettazione un form MDI secondario viene visualizzato
come qualsiasi altro form. Il form MDI secondario viene infatti
visualizzato all'interno del form principale soltanto in fase di
esecuzione. L'icona di un form MDI secondario nella finestra Progetto è
diversa dalle icone dei form di altro tipo.
·	I form MDI secondari non possono essere a scelta obbligatoria.
·	La dimensione iniziale e la posizione dei form MDI secondari sono
controllate dall'ambiente operativo Microsoft Windows. In alternativa, è
possibile impostarle in modo specifico nella routine dell'evento Load.
·	Se viene fatto riferimento a un form MDI secondario prima del
caricamento del form principale, tale form MDI verrà caricato
automaticamente. Se tuttavia viene fatto riferimento al form MDI
principale prima del caricamento del form MDI secondario, il form
secondario non verrà caricato.
Nota   Tutti i form MDI secondari dispongono di bordi ridimensionabili,
della casella del menu di controllo e dei pulsanti di ingrandimento e
riduzione a icona, indipendentemente dalle impostazioni delle proprietà
BorderStyle, ControlBox, MinButton e MaxButton.
Qualsiasi riferimento all'oggetto MDIForm, compresa la lettura o
l'impostazione di proprietà, determina il caricamento e la
visualizzazione del form.
**********************************************************************************************************************************************
Eventi Activate e Deactivate
·	L'evento Activate viene generato quando un oggetto diventa la finestra
attiva.
·	L'evento Deactivate viene generato quando un oggetto non è più la
finestra attiva.
Sintassi
Private Sub oggetto_Activate( )
Private Sub oggetto_Deactivate( )
Il segnaposto oggetto rappresenta un'espressione oggetto che definisce
un oggetto dell'elenco "Si applica a".
Osservazioni
Un oggetto può diventare attivo in seguito a un'azione dell'utente, ad
esempio un clic, oppure utilizzando i metodi Show o SetFocus nel codice.
L'evento Activate può essere generato solo quando un oggetto è visibile.
Un form caricato con l'istruzione Load, ad esempio, non è visibile a
meno che non si utilizzi il metodo Show o si imposti la proprietà
Visible del form su True. 
Gli eventi Activate e Deactivate vengono generati solo quando viene
spostato lo stato attivo in un'applicazione. Lo spostamento dello stato
attivo da o su un oggetto di un'altra applicazione non genera nessuno
dei due eventi. L'evento Deactivate non viene generato quando un oggetto
viene scaricato.
L'evento Activate viene generato prima dell'evento GotFocus; l'evento
LostFocus viene generato prima dell'evento Deactivate.
Activate e Deactivate vengono generati per form MDI secondari solo
quando lo stato attivo si sposta da un form secondario a un altro. In un
oggetto MDIForm con due form secondari, ad esempio, i form secondari
ricevono questi eventi quando lo stato attivo si sposta dall'uno
all'altro. Quando tuttavia lo stato attivo si sposta tra un form
secondario e un form secondario non MDI, gli eventi Activate e
Deactivate vengono ricevuti dal controllo MDIForm principale.
Se un file .exe compilato da Visual Basic visualizza una finestra di
dialogo creata da un file .dll compilato anch'esso in Visual Basic, gli
eventi Deactivate e LostFocus verranno ricevuti dal form del file .exe.
Questo risultato potrebbe essere inatteso poiché non dovrebbe essere
generato l'evento Deactivate:
·	Se l'oggetto è un componente out-of-process.
·	Se l'oggetto non viene scritto in Visual Basic.
·	Nell'ambiente di sviluppo quando viene richiamata una DLL compilata in
Visual Basic.
**********************************************************************************************************************************************
Proprietà AutoShowChildren
Restituisce o imposta un valore che specifica la visualizzazione dei
form MDI secondari caricati.
Sintassi
oggetto.AutoShowChildren [= booleano]
La sintassi della proprietà AutoShowChildren è composta dalle seguenti
parti:
Parte	Descrizione
oggetto	Espressione oggetto che definisce un oggetto dell'elenco "Si
applica a".
booleano	Espressione booleana che specifica se i form MDI secondari
verranno visualizzati automaticamente, come indicato nella sezione
"Impostazioni".
Impostazioni
Le possibili impostazioni di booleano sono:
Impostazione	Descrizione
True	(Predefinita) I form MDI secondari vengono visualizzati
automaticamente quando vengono caricati.
False	I form MDI secondari non vengono visualizzati automaticamente
quando vengono caricati.
Osservazioni
È possibile utilizzare la proprietà AutoShowChildren per caricare form
MDI secondari e visualizzarli solo utilizzando il metodo Show.
**********************************************************************************************************************************************
Metodo Show
Visualizza un oggetto MDIForm o Form. Non supporta argomenti
predefiniti.
Sintassi
oggetto.Show stile, formproprietario
La sintassi del metodo Show è composta dalle seguenti parti:
Parte	Descrizione
oggetto	Facoltativa. Espressione oggetto che definisce un oggetto
dell'elenco "Si applica a". Se oggetto viene omesso, verrà utilizzato il
form associato al modulo attivo.
stile	Facoltativa. Numero intero che determina se il form è a scelta
obbligatoria o non a scelta obbligatoria. Se stile è 0, il form non sarà
a scelta obbligatoria. Se stile è 1, il form sarà a scelta obbligatoria.
formproprietario	Facoltativa. Espressione stringa che specifica il
componente da cui dipende il form visualizzato. Per i form standard di
Visual Basic, utilizzare la parola chiave Me
Osservazioni
Se il form specificato non è caricato quando viene richiamato il metodo
Show, verrà caricato automaticamente.
Quando con il metodo Show viene visualizzato un form non a scelta
obbligatoria, il codice successivo viene eseguito progressivamente.
Quando viene visualizzato un form a scelta obbligatoria, il codice
successivo non viene eseguito finché il form non viene nascosto o
chiuso.
Quando Show visualizza un form a scelta obbligatoria, l'input da
tastiera o mouse è valido solo per gli oggetti del form. Perché sia
possibile l'input in un altro form, il form dovrà essere nascosto o
scaricato, in genere in risposta a un'azione dell'utente. Un oggetto
MDIForm non può essere a scelta obbligatoria.
Quando viene visualizzato un form a scelta obbligatoria, gli altri form
dell'applicazione sono disattivati, ma non lo sono le altre
applicazioni.
Il form di avvio di un'applicazione viene visualizzato automaticamente
dopo la generazione del relativo evento Load.
In questo esempio viene dimostrato l'utilizzo dell'argomento
formproprietario con il metodo Show:
Private Sub cmdShowResults_Click()
	' Visualizza un form a scelta obbligatoria
	' denominato frmResults.
	frmResults.Show vbModal, Me
End Sub
**********************************************************************************************************************************************
Metodo Hide
Nasconde un oggetto MDIForm o Form senza scaricarlo.
Sintassi
oggetto.Hide
Il segnaposto oggetto rappresenta un'espressione oggetto che definisce
un oggetto dell'elenco "Si applica a". Se oggetto viene omesso, verrà
utilizzato il form che ha lo stato attivo.
Osservazioni
Un form nascosto non viene visualizzato sullo schermo e la sua proprietà
Visible è impostata su False. I controlli di un form nascosto non sono
accessibili per l'utente ma sono disponibili per l'applicazione Visual
Basic in esecuzione, per altri processi che possono comunicare con
l'applicazione tramite DDE e per gli eventi del controllo Timer.
Quando un form è nascosto, l'utente non può interagire con
l'applicazione finché non è stato eseguito interamente il codice della
routine di eventi che ha determinato la disattivazione della
visualizzazione del form.
Se il form non è caricato al momento dell'esecuzione del metodo Hide, il
form verrà caricato ma non visualizzato.
**********************************************************************************************************************************************
Il metodo Hide fallisce se viene ripetuto in form a scelta obbligatoria
(File Leggimi)
Nelle versioni precedenti di Visual Basic, quando si chiude un form a
scelta obbligatoria che è stato aperto da un altro form a scelta
obbligatoria, l'esecuzione del codice seguente avviene con successo:
Me.Hide
Me.Hide ' Non verrà generato un errore.
In Visual Basic versione 5.0, l'esecuzione di questo codice viene
interrotta alla seconda occorrenza di "Me.Hide". È possibile sostituire
"Me.Hide" con "Me.Visible = False", come è illustrato nell'esempio
seguente:
Me.Visible = False
Me.Visible = False ' Non viene generato alcun errore.
**********************************************************************************************************************************************
Costanti dei form
Parametri Show
Costante	Valore	Descrizione
vbModal	1	Form a scelta obbligatoria
vbModeless	0	Form non a scelta obbligatoria
Metodo Arrange per form MDI
Costante	Valore	Descrizione
vbCascade	0	Consente di sovrapporre tutti i form MDI secondari non
ridotti a icona
vbTileHorizontal	1	Consente di affiancare orizzontalmente tutti i form
MDI secondari non ridotti a icona
vbTileVertical	2	Consente di affiancare verticalmente tutti i form MDI
secondari non ridotti a icona
vbArrangeIcons	3	Consente di disporre le icone dei form MDI secondari
ridotti a icona
Proprietà WindowState
Costante	Valore	Descrizione
vbNormal	0	Normale
vbMinimized	1	Ridotta a icona
vbMaximized	2	Ingrandita
Impossibile visualizzare form MDI a scelta obbligatoria (Errore 403)
Non è possibile impostare l'opzione a scelta obbligatoria per un
MDIForm. Causa e soluzione dell'errore:
·	Si è cercato di utilizzare il metodo Show (con l'argomento stile
impostato su 1 - vbModal) su un form MDI principale.
Rimuovere dal codice il riferimento all'argomento stile.
·	Si è cercato di compilare un progetto DLL ActiveX che contiene un
MDIForm.
Non è possibile inserire MDIForm in DLL. Rimuovere MDIForm dal progetto
e quindi ricompilarlo oppure impostare EXE standard nella casella Tipo
progetto della finestra di dialogo Proprietà progetto e quindi
ricompilare.
Impossibile visualizzare form MDI secondari a scelta obbligatoria
(Errore 404)
Non è possibile impostare l'opzione a scelta obbligatoria per un form
MDI secondario. Causa e soluzione dell'errore:
·	Si è cercato di utilizzare il metodo Show, con l'argomento stile
impostato su 1 - vbModal, su un form MDI secondario.
Rimuovere dal codice il riferimento all'argomento stile.