Newsgroup: it.comp.lang.visual-basic
Titolo: Domanda semplice! :)

Salve scusate la domanda banale ma per favore dategli un occhiata!
Come faccio a fare aprire da un form un altro form?
Grazie
Markitiello

 Come faccio a fare aprire da un form un altro form?
Per caricare in memoria
    Load frmAltro
Per visualizzare basta
    frmAltro.Show

 ha scritto nel messaggio
news:PVJh9.7622$Hc7.1...@twister1.libero.it...


 Scusa se insisto...ma a che cosa serve caricarlo in memoria??
Ad esempio, se prima lo carichi in memoria, quando arriverà il momento di
visualizzarlo, riuscirai a farlo più velocemente.
Poi boh, io raramente li carico in memoria prima, però in certi casi può
servire.
approfitto del 3d per porre una domanda a chi ne sa di più.
Mi sembra di aver trovato un'altro caso in cui Vb non è logico e l'argomento
si può attaccare benissimo qui.
se ad esempio ho due form, form1 e form2
e da form1 eseguo l'istruzione load form2 giustamente scatta l'evento load
di form2
Fin qui tutto Ok.
Ora, in form 2 dichiaro come public una variabile string di nome CICCIO
Se da form1 eseguo questo codice
Private Sub Command1_Click()
Form2.CICCIO = "CIAO"
MsgBox Form2.CICCIO
End Sub
(visualizza CIAO)
Funziona, anche se form2 non è caricato!
E non accade nemmeno, come pensavo all'inizio, che form2 si autocarica nel
momento in cui viene chiamata una variabile al suo interno.
Ho provato infatti a mettere un msgbox nell'evento _load di form2 e ho
verificato che esso non viene generato.
Secondo me non è logico!
qualcuno me lo può rendere logico, se lo è?
Qualcuno mi può chiarire l'arcano?
Ciao

 Secondo me non è logico!
Condivido, non è per niente logico ma è così.
E' anche scritto, ma è nascostissimo, quasi si vergognassero di dirlo :)
Una variabile non fa caricare form2 come invecie avverrebbe con un qualsiasi
metodo/proprietà.
In questo modo si scatena solo l'evento Initialize (ma c'è qualcuno che usa
questo evento?).
Soluzioni? Non usare mai le var pubbliche (le statiche poi fanno dei casini
indicibili), oppure (io faccio così che è anche più chiaro) carica sempre il
form esplicitamente, così non ti devi preoccupare di cosa sia CICCIO, e
settalo sempre a Nothing dopo averlo scaricato.
Ciao
--
' // Initialize the expression evaluator
Engines.Evaluator = CreateObject("
http://www.neodatatype.net
")
' // you can find resources for and from the NG here!
Me.SitoComune = "
http://www.it-lang-vb.net
"

 settalo sempre a Nothing dopo averlo scaricato.
Tu che modo consigli per passare parametri ad una finestra, parametri che
poi il programmatore sfrutta dall'altra parte per inizializzare la stessa?
Ad esempio una form di visualizzazione ordini, nel caso fosse necessario
usarla sia per inserimento, che per modifica di un'ordine esistente, quindi
dovento inizializzare diversamente la form al momento dell'apertura.

 Tu che modo consigli per passare parametri ad una finestra, parametri che
CUT
io uso property....se possibile con ByVal (ed č possibile quasi
sempre)...dopo essere impazzito piů volte con var pubbliche dimenticate o
cresciute di numero fino a diventare incontrollabili!...comunque ogni tanto
una var pubblica mi scappa!!! (sapessi fare tutto OOP!!!)

 una var pubblica mi scappa!!! (sapessi fare tutto OOP!!!)
Anch'io come Wodka  passo tutto come property Let, Set.
Addirittura passo il nome della sub da chiamare durante la chiusura del form
stesso (una specie di callback) per poi richiamarla appunto nel QueryUnload
con CallByName.
Prestazioni a parte (direi irrilevanti).. codice molto pulito in lettura e
in revisione.
Variabili pubbliche le dichiaro solo in moduli standard da cui ho un
controllo di visibilità migliore
Saluti

 poi il programmatore sfrutta dall'altra parte per inizializzare la stessa?
Personalmente se devo fare una property "al volo" in lettura scrittura
spesso uso le var pubbliche.
Come detto mi "paro" (in ogni caso, con VB non si sa mai) facendo una load
esplicita.
Adesso ho preso l'abitudine di definire un metodo Inizializza([parametri]) a
cui passare tutti i parametri di inizializzazione e sposto qui gran parte
del codice che prima era in form_load:
Load Form1
Call Form1.Inizializza(par1, par2...)
...
Unload Form1
Set Form1 = Nothing
In questo modo non corro il rischio di dimenticarmi un parametro di
inizializzazione e il tutto si riduce a una sola riga più leggibile e
mantenibile.


 mantenibile.
Così ad occhio mi pare che questo sistema sia meglio delle property,
comunque grazie a tutti.
Ciao

 wrote in message
news:am9l6q$3qj$1...@fe1.cs.interbusiness.it...

Effettivamente mi sembra anche a me migliore l'alternativa di Zanna.
Tuttavia .. svariate volte mi serve sapere qualche info in merito al form
aperto ... per esempio se è una maschera di visualizzazione, di insert o di
update.
Espongo dunque una property Get che restituisce il parametro desiderato
(sostanzialmente quello passato in ingresso con una Let).
Nella realtà la differenza tra properties e metodi è molto sottile :
possiamo tranquillamente dire che una property Let è l'equivalente di un
metodo con un solo parametro (anche se la sintassi delle chiamate sono
completamente diverse).
Saluti

 ha scritto nel messaggio
CUT
...tanto per spiegare....
le form mi son sempre più diventate "membra vive" da morte che erano....
non son più contenitori di controlli ma con Get/Let le istruiscono ed esse
rispondono alle chiamate di altre form....accidenti a non averlo saputo fare
prima!
:-)

 prima!
:-)
Io però continuo a ribadire che a Vb manca una cosa fondamentale!
Il MessageToChildren, per generare eventi ai figli di una madre.