Newsgroup: it.comp.lang.visual-basic
Titolo: Aprire una form sapendo il nome

Scusate la banalità.
A codice, devo aprire (caricare) una form. Il problema è che il nome della
form giusta da caricare, lo prendo da una tabella, una stringa, quindi non
lo conosco mentre scrivo il codice.
Praticamente mi serve il modo di risolvere una situazione:
Load "frmProva"
"frmProva".show
Penso che il comando load voglia un oggetto, e non il nome dell'oggetto
(ossia la stringa che ho).
So che è difficile da spiegare, ma sarà sicuramente una stupidaggine
risolverlo!! Ma non mi viene! :)
Grazie!
Starla

"Starla" <starla@-NO-libero-SPAM-.it> ha scritto nel messaggio
news:arcr2m$2ji$1...@monty.lombardiacom.it...

prova con una collection,
ovvero:
se in una collection inserisci i riferimenti alle form
del tuo programma e come indice usi il nome
della form stessa poi puoi fare:
load(tuaCol("nomeForm"))
tuaCol("nomeForm").show
--
bye BlackMagic
ICQ#:85485468

 tuaCol("nomeForm").show
Grazie mille, č proprio quel che intendevo.
Posso chiederti come fare ad inizializzare e costruire questa mia
collection? Come faccio ad infilarici i riferimenti ai form?
Grazie ancora.
Starla


Primo passo: cerca nella guida l'oggetto collection e guarda
come funziona...
In seguito:
dovresti dichiarare una variabile globale rispetto
all'applicazione
es:
public formCollection as collection
poi all'apertura del programma carichi nella collection
i riferimenti alle form del tuo programma:
es:
set formCollection = new Collection
formCollection.add form1, "nomeForm1"
formCollection.add form2, "nomeForm2"
.
.
.
formCollection.add formN, "nomeFormN"
fai attenzione che il primo parametro è un oggetto,
la tua form per intenderci e il secondo una stringa
(ovvero il nome che intendi usare per richiamare la form)


 formCollection.add form2, "nomeForm2"
Ecco, era questo che mi sfuggiva, grazie mille per il tuo tempoooo!
Starla

 ha scritto nel messaggio
news:arcumu$gt12o$1...@ID-150836.news.dfncis.de...

In questa maniera bisogna prestare attenzione anche quando si scarica il
form... se rimane il riferimento nella collection, il form non viene
scaricato correttamente e nel caso peggiore potrebbero innescarsi
riferimenti circolari che le routine di garbage collection del VB non
riescono a gestire correttamente con conseguenti errori dell'applicazione e
spreco di memoria.
Si potrebbe utilizzare la proprietà implicita "Forms", ma dovresti tenere i
form caricati e nascosti e non so se questo sia compatibile con
l'applicazione.
Molto più semplicemente, per evitare problemi, io lo farei o parametrizzando
i form, oppure con un select/case anche se risultasse chilometrico.

 i form, oppure con un select/case anche se risultasse chilometrico.
Che pirla, non ci avevo pensato. Sono 23 forms, ma una select case mi evita
menate ed è più immediato. Come ho fatto a no pensarci prima! :)
Grazie!
Starla

"Starla" <starla@-NO-libero-SPAM-.it> wrote in message
news:arcr2m$2ji$1...@monty.lombardiacom.it...

In VB6 puoi guardare la funzione CallByName
Saluti

La strada più veloce, è a mio avviso, quella di impostare, come form
di partenza, una finestra (invisibile) nella quale fare la select al
db per determinare quale form deve essere mostrato.

La via più veloce per risolvere il problema, è quella di impostare
come form di partenza, una maschera invisibile, nella quale farai la
select al db (per determinare quale form caricare).
non ti resta che scaricare questa maschera, e fare lo show del form
giusto.

 In VB6 puoi guardare la funzione CallByName
Scusa ma non penso che c'entri con il mio problema..
CallByName si usa per invocare metodi o settare proprietà sotto forma di
stringa, ma ha bisogno comunque del parametro object come object.. a me
interessava chiamare l'object come stringa..
Grazie comuqnue :)
Starla

 formCollection.add form2, "nomeForm2"
L'utlima l'ultima, poi non ti stresso piu!! :)
Nel caso decidessi per la collection, esiste un modo per riempire questa
collection a runtime, con un ciclo per tutti i form dell'applicazione? Una
cosa del tipo:
For ogni for dell'applicazione
    formcollection.add formobject, formname
end for
Chiaro? Non so proprio come scriverlo... dove sono contenuti tutti i form di
un'applicazione? In quale insieme?
Grazie ancora, ciao.
Starla

 Starla


 (insieme forms)
Se ne era parlato un po' di tempo fa:
Dim frm As Form
Forms.Add "Form2"
For each frm In Forms
    If frm.Name = "Form2" Then frm.Show
Next
ciao
ugo

 ha scritto nel messaggio
news:ardv0n$hjnhu$1...@ID-96367.news.dfncis.de...

avevo letto alcuni post di mesi fa, ma la soluzione
alla quale si era arrivati, se non ho capito male, è
che se le form non sono presenti nell'insieme forms
non è possibile enumerarle,
con il metodo Forms.Add "Form2" non è che carichi
in memoria Form2 (generi l'evento Load)
e questa rimane nascosta fino a che
non chiami il relativo metodo show?
Se viene fatto questo,
è probabile che come soluzione non si adatti
alle necessità di Starla, anche perchè negli
ultimi post chiedeva di poter enumerare le form di un'applicazione
senza doverne conoscere il nome.
Come soluzione al suo problema originale, invece, mi sembra
ottima.


 Next
Grazie mille, in effetti risolve il mio problema. In verità mi basta fare:
Dim NomeForm as string
NomeForm = "frmProva"
forms.add Nomeform
...ed il form viene caricato (non ho capito bene il perchè, ma viene
caricato ;) ).
Grazie a tutti quelli che hanno voluto darmi una mano! :).
Starla


Perchè aggiungi l'oggetto form alla collezione forms
che è collezione pubblica gestata da vb.
ciao
ugo

 che è collezione pubblica gestata da vb.
vabbe' che vb e' lento, ma 9 mesi... :P

 vabbe' che vb e' lento, ma 9 mesi... :P
ROTFL!
"Attenzione: Labrador in agguato!"
ciao
ugo

 "Attenzione: Labrador in agguato!"
fate uscire prima le brioches e i bomboloni !


Eh no... tentativo di corruzione?
Spero che J non sia cosě "facile"...
(specialmente dopo aver visto il "suo" calendario...)
 ;-PPPPP
ciao
ugo

 Spero che J non sia cosě "facile"...
la fedelta' del labrador e' proverbiale.
se il bombolone e' alla crema ti viene dietro anche il mio nick.